Java 多线程 生产者消费者 jdk1.5后新方法
来源:互联网 发布:完全开源的cms系统 编辑:程序博客网 时间:2024/05/19 02:01
/*生产者,消费者多生产者,多消费者的问题if判断标记 只有一次 会导致不该运行的线程运行了,出现了数据错误的情况while判断标记 解决了线程获取执行权后,是否要允许!notifyAll解决了 本方线程一定会唤醒对方线程(但是影响效率)notify 只能唤醒一个线程,如果本方唤醒了本方没有意义 而且while判断标记+ notify会导致死锁Lock接口:出现替代了同步代码块或同步函数,将同步的隐式锁操作变成了显示锁操作同时更为灵活,可以一个锁上加多组监视器lock():获取锁unlock():释放锁,通常需要定义finally 代码块中Condition接口:出现了替代Object中的wait notify notifyAll方法将这些监视器方法单独进行了封装,变成Condition监视器对象可以将任意锁进行组合wait();signal();signalAll();*/ import java.util.concurrent.locks.*;class Producer implements Runnable{private Resource r;Producer(Resource r){this.r=r;}public void run(){while(true){r.set("烤鸭");}}}class Consumer implements Runnable{private Resource r;Consumer(Resource r){this.r=r;}public void run(){while(true){r.out();}}}class Resource{private String name;private int count=1;private boolean flag=false;//创建一个锁对象Lock lock=new ReentrantLock();//通过已有的锁获取该锁上的监视器对象//Condition con =lock.newCondition();//通过已有的锁获取两组监视器,一组监视生产者一组监视消费者Condition producer_con=lock.newCondition();Condition consumer_con=lock.newCondition();public void set(String name){lock.lock();try{while(flag){/*try{this.wait();} catch(InterruptedException e){}*/try{producer_con.await();} catch(InterruptedException e){}}this.name=name+count;count++;System.out.println(Thread.currentThread().getName()+"..生产者.."+this.name);flag=true;//notify();//con.signalAll();consumer_con.signal();}finally{lock.unlock();}}public void out(){lock.lock();try{while(!flag){/*try{wait();} catch(InterruptedException e){}*/try{consumer_con.await();} catch(InterruptedException e){}}System.out.println(Thread.currentThread().getName()+"..--消费者----.."+this.name);flag=false;//notify();//con.signalAll();producer_con.signal();}finally{lock.unlock();} }}class ProducerConsumerDemo2{public static void main(String[] args) {Resource r=new Resource();Producer pro=new Producer(r);Consumer conn=new Consumer(r); Thread t0=new Thread(pro);Thread t1=new Thread(pro);Thread t2=new Thread(conn);Thread t3=new Thread(conn);t0.start();t1.start();t2.start();t3.start();}}
阅读全文
0 0
- Java 多线程 生产者消费者 jdk1.5后新方法
- Java---20---多线程:生产者和消费者2(JDK1.5升级版)
- Java多线程 多个生产者和多个消费者实现同步 jdk1.5
- 多线程-多生产者多消费者问题JDK1.5新特性
- java多线程 消费者-生产者
- java多线程 消费者-生产者
- java 多线程 生产者消费者
- JAVA [ 多线程 -- 生产者消费者 ]
- Java 多线程-生产者、消费者
- java多线程--生产者消费者
- java多线程-生产者消费者
- Java多线程生产者消费者
- java多线程-生产者消费者
- java 多线程(5) wait() / notify() 生产者消费者
- Java——jdk1.5生产者消费者问题优化
- JAVA学习第二十七课(多线程(六))- 多生产者多消费者问题(JDK1.5新特性)
- Java 多线程(三)线程间的通信jdk1.5中Lock,Condition---生产者消费者为例
- java多线程 生产者与消费者
- C++学习13:读写文本文件
- Walle多渠道打包
- 剑指offer46 求1+2+3...+n的和
- HDU-4775---Infinite Go (bfs)
- NKOJ 2107 可爱的猴子(并查集)
- Java 多线程 生产者消费者 jdk1.5后新方法
- 数据结构之顺序线性表
- Unity学习1 控制物体移动
- 打开ServletRequest 类查看源代码出现 Unmatched braces in the pattern.
- 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾
- centos与windows共享文件夹
- 深入理解java异常处理机制
- 187. Repeated DNA Sequences
- 【51Nod1403】有趣的堆栈