synchronized互斥锁结合wait()、notify()方法使用,实现线程的阻塞以及线程调用案例
public class Test1 {int sum = 0 ;String str= "锁";//生产者public class production extends Thread{//重写run方法@Overridepublic void run() {//使用锁synchronized (str){//循环生产for (;;) {sum++;System.out.println("生产力"+sum);try {//避免输出过快,开启线程等待Thread.sleep(500);//判断总的数量if (sum==10){//随机唤醒一个锁,但因为生产者的线程没有停止,所以会继续执行str.notify();//Producer线程等待, 释放锁. 线程等待后续代码就不会继续执行,直到被唤醒str.wait();}} catch (InterruptedException e) {e.printStackTrace();}}}}}public class Consumer extends Thread{@Overridepublic void run() {synchronized (str){//存库为0, Consumer线程等待(不等待, Consumer线程先获得到锁会出现负消费)if(sum==0){try {str.wait();} catch (InterruptedException e) {e.printStackTrace();}}for (;;) {sum--;System.out.println("消费了"+(sum+1)+"个产品");try {Thread.sleep(500);//库存为10, 线程1等待, 释放锁System.out.println(sum);if(sum==0){try {//唤醒一个线程, Consumer线程并没有等待,所以会继续执行str.notify();//Consumer线程等待, 释放锁. 线程等待后续代码就不会继续执行,直到被唤醒str.wait();} catch (InterruptedException e) {e.printStackTrace();}}} catch (InterruptedException e) {e.printStackTrace();}}}}}public static void main(String[] args) {Test1 test1 = new Test1();production production = test1.new production();production.start();Consumer consumer = test1.new Consumer();consumer.start();}}
synchronized互斥锁结合wait()、notify()方法使用,实现线程的阻塞以及线程调用案例相关推荐
- 互斥锁mutex的使用方法
在线程实际运行过程中,我们经常需要多个线程保持同步.这时可以用互斥锁来完成任务:互斥锁的使用过程中,主要有pthread_mutex_init,pthread_mutex_destory,pthrea ...
- 多线程之互斥锁(mutex)的使用方法
关于读写锁可查看:多线程之读写锁(unique_lock与shared_lock) 多个线程访问同一资源时,为了保证数据的一致性,最简单的方式就是使用 mutex(互斥锁). 引用 cpprefere ...
- 进程互斥锁,队列,IPC进程间通信,生产者与消费者,线程,线程对象的属性,先行互斥锁...
进程互斥锁: 让并发变成串行, 牺牲了执行效率, 保证了数据安全.在程序并发执行时,需要修改数据时使用. 队列 队列:先进先出 相当于内存中产生一个队列空间,先进先出, 可以存放多个数据,但数 ...
- java synchronized互斥锁使用
1.private static Object lock = new Object(); // static确保只有一把锁 2.public void increaseI() { synchr ...
- C++ 线程同步之互斥锁
文章目录 1.简介 2.std::mutex 3.线程同步 4.std::lock_guard 5.std::recursive_mutex-少用 6.std::timed_mutex 1.简介 进行 ...
- 互斥锁的概念和使用方法。
声明:转载别人的,觉得对自己有用.链接地址:http://blog.csdn.net/harry_lyc/article/details/6222920 在单线程条件下,由于对数据操作,在同样的时间下 ...
- 线程安全: 互斥锁和自旋锁(10种)
无并发,不编程.提到多线程就很难绕开锁?. iOS开发中较常见的两类锁: 1. 互斥锁: 同一时刻只能有一个线程获得互斥锁,其余线程处于挂起状态. 2. 自旋锁: 当某个线程获得自旋锁后,别的线程会一 ...
- Java线程的挂起与恢复 wait(), notify()方法介绍
一, 什么是线程的挂起与恢复 从字面理解也很简单. 所谓线程挂起就是指暂停线程的执行(阻塞状态). 而恢复时就是让暂停的线程得以继续执行.(返回就绪状态) 二, 为何需要挂起和恢复线程. 我们来看1个 ...
- 可重入锁(递归锁) 互斥锁属性设置
前言: 上一次刷博客的时候,看到了自旋锁,通过学习Linux内核,对自旋锁有了一定的了解.在学习的过程中看到这么一句话--自旋锁是不可递归的.自旋锁不可递归,难道有可以递归的锁?带着这个问题,我们来看 ...
- 你了解多线程自旋锁、互斥锁、递归锁等锁吗?
首先看一下问题引出,先看一些经典的问题. 多线程的隐患 首先我们利用多线程的话肯定是好处多多,因为我们可以同时去做一些事情,大大的提高了效率.像我们下载视频的时候就可以同时下载多个视频,这样是节省了很 ...
最新文章
- WMI Series :管理对象的信息查询和方法访问
- C++知识点50——虚函数与纯虚函数(上)
- Xamarin iOS项目找不到模拟器
- 不是python中用于开发用户界面的第三方库-Python三方库:wxPython(GUI图形用户界面)...
- POJ 3525/UVA 1396 Most Distant Point from the Sea(二分+半平面交)
- Cesium - 转换obj模型为3D Tiles 并加载
- linux查漏补缺之常用命令
- 如何在QQ浏览器查看默认搜索引擎
- 在Android中显示GIF动画
- 如何利用MySQL Workbench创建Model EER 图
- 数据库数据变大会导致查询慢_是什么导致数据库变慢?
- php字符串替换多余逗号_PHP字符过滤函数去除字符串最后一个逗号(rtrim)_php技巧...
- C语言 · 字符串输入输出函数
- 同济大学 线性代数 第六版 pdf_【课后习题答案】工程数学线性代数同济第六版+课后习题答案...
- 联想System x服务器主要硬件Windows Server驱动下载
- M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid
- 南航计算机英语面试经验,南航面试英文自我介绍
- 大数据与人工智能方向基础课程简单介绍
- 小度wifi还原为无线网卡
- 小米路由器R3原厂BootLoader和eeprom备份
热门文章
- 新鲜出炉的自主协同操作系统研讨会纪要
- 2022美国大学生数学建模竞赛C题思路
- 【优化预测】基于matlab天牛须算法优化BP神经网络预测【含Matlab源码 1318期】
- 【运动学】基于matlab Singer模型算法机动目标跟踪【含Matlab源码 1157期】
- 【图像评价】基于matlab GUI图像客观评价【含Matlab源码 855期】
- 【人脸识别】基于matlab GUI SVM和PCA人脸识别【含Matlab源码 369期】
- button执行onclick函数_可能你的react函数组件从来没有优化过
- android设置内存大小,Android Studio内存大小的设置
- linux系统连接实验室服务器步骤详解
- android 开启离屏缓存,Android性能优化笔记(持续更新帖)