java多线程之生产者和消费者模型
来源:互联网 发布:vivowifi备份软件 编辑:程序博客网 时间:2024/04/25 22:55
生产者和消费者模型
public class Model { public static void main(String[] args) { Resource r = new Resource(); Producer p1 = new Producer(r); Producer p2 = new Producer(r); Producer p3 = new Producer(r); Consumer c1 = new Consumer(r); Consumer c2 = new Consumer(r); Consumer c3 = new Consumer(r); new Thread(p1).start(); new Thread(p2).start(); new Thread(p3).start(); new Thread(c1).start(); new Thread(c2).start(); new Thread(c3).start(); }}/** * 实现内存共享 * 加锁的前提条件: * 1。有共享数据 * 2。有多条指令对共有数据进行操作 * 同步: * 有多个线程对共享数据操作 * @author admin * */class Resource { private int count = 1; private String name; private boolean flag = true; private Lock lock = new ReentrantLock(); //建立互斥所 // private Condition con = lock.newCondition(); //获得监视器 private Condition producer_con = lock.newCondition(); private Condition consumer_con = lock.newCondition(); //生产鸭子 public void produce(String name) { lock.lock(); try{ while(flag){ //有鸭子,需要消费,生产线程等待,唤醒消费线程 try { producer_con.await(); } catch (InterruptedException e) { e.printStackTrace(); } } //没有鸭子,进行生产 count++; this.name = name; System.out.println(Thread.currentThread().getName()+this.name+",数量为:"+count); flag = true; //表示生产出鸭子 consumer_con.signal(); } //解锁 finally { lock.unlock(); } } //消费鸭子 public void consume(String name) { lock.lock(); try{ while(!flag){ //没有鸭子了,需要生产了 try { consumer_con.await(); } catch (InterruptedException e) { e.printStackTrace(); } } //有鸭子,进行消费 this.name = name; System.out.println(Thread.currentThread().getName()+this.name+",数量为:"+count); flag = false; //表示鸭子已经消费了 producer_con.signal(); } finally{ lock.unlock(); } }}class Producer implements Runnable { // 共享资源 private Resource resource; // 初始化资源 public Producer(Resource resource) { this.resource = resource; } // 实现生产者的调用 @Override public void run() { while (true) { resource.produce("生产鸭子"); } }}class Consumer implements Runnable { // 共享资源 private Resource resource; // 初始化资源 public Consumer(Resource resource) { this.resource = resource; } // 实现生产者的调用 @Override public void run() { while (true) { resource.consume("消费鸭子"); } }}
0 0
- java多线程之生产者和消费者模型
- JAVA多线程之生产者消费者模型
- Java多线程之生产者消费者模型
- Java--多线程之生产者消费者模型
- 多线程编程之生产者和消费者模型
- java多线程--生产者和消费者模型
- 多线程之生产者消费者模型
- 多线程之生产者消费者模型
- 多线程之生产者消费者模型
- 多线程之生产者消费者模型
- java多线程生产者、消费者模型
- Java多线程 -- 生产者消费者模型
- Java 多线程:生产者消费者模型
- Java 多线程:生产者消费者模型
- 多线程模型:生产者和消费者
- Java多线程-通信之生产者和消费者
- java多线程之生产者和消费者案例
- java多线程同步案例之--生产者消费者模型
- 快速从maven中央仓库中找到jar包坐标
- COPY 云部署中的 Hadoop
- IOS开发NSBundle对象使用详解
- 函数指针,函数模板,std::bind
- Android Studio 下载SDK
- java多线程之生产者和消费者模型
- struts2深入浅出
- 阿里感悟(九)- 能力和晋升
- CSS中的选择器优先级考虑
- 【Android View】Android中View对触摸事件的处理和传递dispatchTouchEvent、onInterceptTouchEvent
- c++ 模板与继承
- AP吉他调弦器(AP Guitar Tuner) v1.02
- CAN总线基础知识
- PhoneGap学习笔记(1)