多线程——生产者与消费者(多)1.5新锁,问题解决
package 多线程;import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class PandCnewLock {public static void main(String[] args) {
// Producer p= new Producer2();
// Consumer c = new Consumer2();
// new Thread(p,"生产者").start();
// new Thread(p,"生产者").start();
// new Thread(c,"消费者").start();
// new Thread(c,"消费者").start();new Thread(new Producer2(),"生产者").start();new Thread(new Consumer2(),"消费者").start();new Thread(new Producer2(),"生产者").start();new Thread(new Consumer2(),"消费者").start();}}class Producer2 implements Runnable{Resource2 r = Resource2.getRes();@Overridepublic void run() {while(true)r.produce("商品:");}}class Consumer2 implements Runnable{Resource2 r = Resource2.getRes();@Overridepublic void run() {while(true)r.consume();}}class Resource2{private int count;private boolean flag=false;static Resource2 r = new Resource2();Lock lock = new ReentrantLock();Condition cp = lock.newCondition();Condition cc = lock.newCondition();private Resource2() {}public static Resource2 getRes(){return r;}public void produce(String name){lock.lock();//上锁try {while(!flag)try {cp.await(); //与此 Condition 相关的锁以原子方式释放,并且出于线程调度的目的,将禁用当前线程,} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}name = name+count++;flag=false;System.out.println(Thread.currentThread().getName()+" .........生产商品:"+count);cc.signal();//唤醒一个cc上等待线程。} finally {lock.unlock();}}public void consume(){lock.lock();try {while(flag)try {cc.await();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}flag=true;System.out.println(Thread.currentThread().getName()+" ======消费商品:"+count);cp.signal();} finally {lock.unlock();}}}
转载于:https://blog.51cto.com/jiangzuun2014/1441287
多线程——生产者与消费者(多)1.5新锁,问题解决相关推荐
- Java多线程-生产者与消费者
Java多线程生产者与消费者,准确说应该是"生产者-消费者-仓储"模型,使用了仓储,使得生产者消费者模型就显得更有说服力. 对于此模型,应该明确一下几点: 1.生产者仅仅在仓储未满 ...
- java多线程生产者与消费者问题_Java多线程详解之四:生产者消费者问题
一.问题描述 生产者消费者问题(Producer-Consumer problem),也称有限缓冲区问题(Bounded-buffer promblem),是一个多线程同步问题的经典案例.对于一个固定 ...
- java多线程生产者与消费者问题_java多线程实现生产者与消费者问题
生产者与消费者多线程实现,首先的问题就是同步,就是关于临界资源的访问 我们首先来定义一个临界资源类,这里设为Q class Q { int z=4; } 这个int型的z就是我假设的临界资源的个数 然 ...
- java多线程生产者与消费者案例_多线程操作实例——生产者与消费者
面对多线程学习生产者与消费者是最基本的实例 对于java后端开发的人员必须要掌握,还有考研考试计算机操作系统的同鞋. 下面是三个实例对于生产者与消费者的的例子,层层递进,逐步解决问题. 问题:生产者- ...
- C++多线程-生产者与消费者模型
生产者-消费者是很有意思的一种算法.它的存在主要是两个目的,第一就是满足生产者对资源的不断创造:第二就是满足消费者对资源的不断索取.当然,因为空间是有限的,所以资源既不能无限存储,也不能无限索取. 生 ...
- Java基础进阶多线程-生产者和消费者模式
1.什么是"生产者和消费者模式"? 生产线程负责生产,消费线程负责消费 生产线程和消费线程要达到均衡 这是一种特殊的业务需求,在这种特殊的情况下需要使用wait方法和notify方 ...
- c++多线程生产者与消费者问题代码
1.目录结构 2.代码 BufferPool.h #ifndef BUFFERPOOL #define BUFFERPOOL #include<windows.h> #include< ...
- 爬虫多线程生产者与消费者
#-*-coding:utf-8-*- # -*-coding:utf-8-*- import threading, time, requests, json from queue import Qu ...
- Java 多线程-生产者、消费者
一.整体代码 ThreadDemo.java public class ThreadDemo { public static void main(String[] args) { Godown god ...
最新文章
- 欧拉回路与欧拉路(模板)
- D2前端技术论坛之网页无障碍学习笔记
- 使用git时报错出现vim.exe.stackdump
- PostCSS深入学习: PostCSS和Sass、Stylus或LESS一起使用
- 学python要多久-目前Python学习需要多长时间?老男孩Python入门培训
- 【CCCC】L2-012 关于堆的判断 (25分),,手写堆,二叉树编号,向上调整
- 工作流图形设计器参考资料
- uniapp开发原生android插件,uni-app原生插件(native plugin)开发指南
- 计算机文化书签,《计算机文化基础》EXCEL-机试[1]
- html特殊符号怎么输入法,教您特殊符号怎么打出来
- Python项目实战化:爬取堆糖网研究所美好生活照
- 使用IDEA编写Java程序时遇到的小提醒Common part can be extracted from ‘if‘
- 【数学解析几何】C_几种常见的函数曲线——(典型曲线图)
- swift 学习-- 元组
- 穿戴式设备应该新机遇--可以测心率的光感小米手环
- 程序员去外包公司有前途吗?
- 网易北京研发中心-网易传媒部门深度学习算法实习生面试总结
- FPGA错误集锦(二):Output pins are stuck at VCC or GND
- Point Cloud Labeling Tool使用说明
- 单神经元PID控制+Simulink控制系统仿真