Java多线程之生产者消费者demo
2015-12-27 12:30
447 查看
package com.ccy.thread.demo; class ProducerConsumerDemo { public static void main(String[] args) { Resource r = new Resource(); Producer pro = new Producer(r); Consumer con = new Consumer(r); Thread t3 = new Thread(con); Thread t4 = new Thread(con); new Thread(pro).start(); new Thread(pro).start(); t3.start(); t4.start(); } } /* 对于多个生产者和消费者。 为什么要定义while判断标记。 原因:让被唤醒的线程再一次判断标记。 为什么定义notifyAll, 因为需要唤醒对方线程。 因为只用notify,容易出现只唤醒本方线程的情况。导致程序中的所有线程都等待。 */ class Resource{ private String name; private int count = 1; private boolean flag = false; // t1 t2 public synchronized void set(String name) { while(flag){ try{ this.wait(); }catch(Exception e){ e.printStackTrace(); } } this.name = name+"--"+count++; System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name); flag = true; this.notifyAll(); } // t3 t4 public synchronized void out() { while(!flag){ try{ wait(); }catch(Exception e){ e.printStackTrace(); } } System.out.println(Thread.currentThread().getName()+"...消费者........."+this.name); flag = false; this.notifyAll(); } } class Producer extends Thread { private Resource res; Producer(Resource res) { this.res = res; } public void run() { while(true) { res.set("+生产商品+"); } } } class Consumer implements Runnable { private Resource res; Consumer(Resource res) { this.res = res; } public void run() { while(true) { res.out(); } } }
我的博客:http://blog.csdn.net/caicongyang
记录与分享,你我共成长 -from caicongyang
相关文章推荐
- 常用算法回顾——选择排序
- spring源码编译为eclipse项目
- Java 集合框架(JCF)
- JDK分析工具&JVM垃圾回收(转)
- Java 中 字节流 和 字符流的区别(转自郝斌 Java 教学)
- Spring MVC一事务控制问题
- java指定dns
- java 反射机制
- 常用算法回顾——二分查找算法
- Java中有关Null的9件事
- java中String类详解(收集)
- 【Java并发编程实战】—– AQS(三):阻塞、唤醒:LockSupport
- 代理模式
- Spring MVC 集成 jackson-dataformat-xml 问题
- MyEclipse激活步骤
- 【Java并发编程实战】----- AQS(三):阻塞、唤醒:LockSupport
- Java随机数总结
- 使用axis1+spring+hibernate搭建webservice框架
- Java Socket(六) 使用多线程实现多客户端的通信
- MyEclipse8.5注册码,到2018年