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()方法使用,实现线程的阻塞以及线程调用案例相关推荐

  1. 互斥锁mutex的使用方法

    在线程实际运行过程中,我们经常需要多个线程保持同步.这时可以用互斥锁来完成任务:互斥锁的使用过程中,主要有pthread_mutex_init,pthread_mutex_destory,pthrea ...

  2. 多线程之互斥锁(mutex)的使用方法

    关于读写锁可查看:多线程之读写锁(unique_lock与shared_lock) 多个线程访问同一资源时,为了保证数据的一致性,最简单的方式就是使用 mutex(互斥锁). 引用 cpprefere ...

  3. 进程互斥锁,队列,IPC进程间通信,生产者与消费者,线程,线程对象的属性,先行互斥锁...

    进程互斥锁: 让并发变成串行, 牺牲了执行效率, 保证了数据安全.在程序并发执行时,需要修改数据时使用. 队列 队列:先进先出 ​ 相当于内存中产生一个队列空间,先进先出, ​ 可以存放多个数据,但数 ...

  4. java synchronized互斥锁使用

    1.private static Object lock = new Object(); // static确保只有一把锁 2.public void increaseI() {     synchr ...

  5. C++ 线程同步之互斥锁

    文章目录 1.简介 2.std::mutex 3.线程同步 4.std::lock_guard 5.std::recursive_mutex-少用 6.std::timed_mutex 1.简介 进行 ...

  6. 互斥锁的概念和使用方法。

    声明:转载别人的,觉得对自己有用.链接地址:http://blog.csdn.net/harry_lyc/article/details/6222920 在单线程条件下,由于对数据操作,在同样的时间下 ...

  7. 线程安全: 互斥锁和自旋锁(10种)

    无并发,不编程.提到多线程就很难绕开锁?. iOS开发中较常见的两类锁: 1. 互斥锁: 同一时刻只能有一个线程获得互斥锁,其余线程处于挂起状态. 2. 自旋锁: 当某个线程获得自旋锁后,别的线程会一 ...

  8. Java线程的挂起与恢复 wait(), notify()方法介绍

    一, 什么是线程的挂起与恢复 从字面理解也很简单. 所谓线程挂起就是指暂停线程的执行(阻塞状态). 而恢复时就是让暂停的线程得以继续执行.(返回就绪状态) 二, 为何需要挂起和恢复线程. 我们来看1个 ...

  9. 可重入锁(递归锁) 互斥锁属性设置

    前言: 上一次刷博客的时候,看到了自旋锁,通过学习Linux内核,对自旋锁有了一定的了解.在学习的过程中看到这么一句话--自旋锁是不可递归的.自旋锁不可递归,难道有可以递归的锁?带着这个问题,我们来看 ...

  10. 你了解多线程自旋锁、互斥锁、递归锁等锁吗?

    首先看一下问题引出,先看一些经典的问题. 多线程的隐患 首先我们利用多线程的话肯定是好处多多,因为我们可以同时去做一些事情,大大的提高了效率.像我们下载视频的时候就可以同时下载多个视频,这样是节省了很 ...

最新文章

  1. WMI Series :管理对象的信息查询和方法访问
  2. C++知识点50——虚函数与纯虚函数(上)
  3. Xamarin iOS项目找不到模拟器
  4. 不是python中用于开发用户界面的第三方库-Python三方库:wxPython(GUI图形用户界面)...
  5. POJ 3525/UVA 1396 Most Distant Point from the Sea(二分+半平面交)
  6. Cesium - 转换obj模型为3D Tiles 并加载
  7. linux查漏补缺之常用命令
  8. 如何在QQ浏览器查看默认搜索引擎
  9. 在Android中显示GIF动画
  10. 如何利用MySQL Workbench创建Model EER 图
  11. 数据库数据变大会导致查询慢_是什么导致数据库变慢?
  12. php字符串替换多余逗号_PHP字符过滤函数去除字符串最后一个逗号(rtrim)_php技巧...
  13. C语言 · 字符串输入输出函数
  14. 同济大学 线性代数 第六版 pdf_【课后习题答案】工程数学线性代数同济第六版+课后习题答案...
  15. 联想System x服务器主要硬件Windows Server驱动下载
  16. M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid
  17. 南航计算机英语面试经验,南航面试英文自我介绍
  18. 大数据与人工智能方向基础课程简单介绍
  19. 小度wifi还原为无线网卡
  20. 小米路由器R3原厂BootLoader和eeprom备份

热门文章

  1. 新鲜出炉的自主协同操作系统研讨会纪要
  2. 2022美国大学生数学建模竞赛C题思路
  3. 【优化预测】基于matlab天牛须算法优化BP神经网络预测【含Matlab源码 1318期】
  4. 【运动学】基于matlab Singer模型算法机动目标跟踪【含Matlab源码 1157期】
  5. 【图像评价】基于matlab GUI图像客观评价【含Matlab源码 855期】
  6. 【人脸识别】基于matlab GUI SVM和PCA人脸识别【含Matlab源码 369期】
  7. button执行onclick函数_可能你的react函数组件从来没有优化过
  8. android设置内存大小,Android Studio内存大小的设置
  9. linux系统连接实验室服务器步骤详解
  10. android 开启离屏缓存,Android性能优化笔记(持续更新帖)