生产者-消费者问题
来源:互联网 发布:mac电脑散热器声音很大 编辑:程序博客网 时间:2024/05/16 01:11
问题如下:
1)若消费者先抢到CPU执行权,会先消费资源;但若此时没有资源 ,应当先生产再消费;
2)若生产者先抢到CPU执行权,会先生产资源;但若此时有资源,应当先消费再生产;
解决思路:
1)对生产者而言,先查看是否有资源,有就等待,无就等待消费者消费完之后,通知生产
2)对消费者而言,先查看是否有资源,有就消费,无就等待生产者生产完之后,通知消费
Java代码实现:synchronized+wait/notifyAll
public class ProductConsumer { private static int res = 10; // 资源 static Object objLock = new Object();// 同步锁对象 static boolean haveRes = false;// 标志位,是否有资源 public static void main(String[] args) { Thread product = new Thread(new Runnable() { @Override public void run() { while (true) { synchronized (objLock) { if (haveRes) { try { objLock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } res--; if (res > 0) System.out.println(res); haveRes = !haveRes; objLock.notify(); } } } }); Thread consumer = new Thread(new Runnable() { @Override public void run() { while (true) { synchronized (objLock) { if (!haveRes) { try { objLock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } res--; if (res > 0) System.out.println(res); haveRes = !haveRes; objLock.notify(); } } } }); product.start(); consumer.start(); }}
代码输出:
987654321
阅读全文
0 0
- 生产者-消费者问题
- 生产者-消费者问题
- 生产者-消费者问题
- 生产者-消费者问题
- 线程-生产者消费者问题
- 生产者-消费者问题实现
- 用JAVA 实现“生产者-消费者”问题
- 用JAVA 实现“生产者-消费者”问题
- 并发控制-生产者-消费者问题
- 用JAVA 实现“生产者-消费者”问题
- 用JAVA 实现“生产者-消费者”问题
- 生产者-消费者问题
- 生产者-消费者问题
- 生产者-消费者问题
- 操作系统:生产者-消费者问题
- 生产者与消费者问题
- 生产者-消费者问题
- 关于生产者-消费者问题
- 求二叉树的前中后序递归、迭代,树的叶子节点,高度(c语言)
- mysql 数据批量插入效率
- Android任务和返回栈简单总结
- Python爬虫——selenium.common.exceptions.WebDriverException: Message: Service geckodriver unexpectedly e
- MyCat学习笔记
- 生产者-消费者问题
- 定制专属于自己的HHKB机械键盘
- 软件工程导论之详细设计总结
- @responseBody注解的使用
- Vue key的作用
- 今天回顾了一下strcpy函数,总结一下下。
- python 服务器端通信,多线程,装饰器
- TensorFlow官方文档中文版-笔记(五)
- 【绝对重磅】地理信息可不再需要地图投影