Lock 生产者消费者模型示例
来源:互联网 发布:婚纱摄影 知乎 编辑:程序博客网 时间:2024/06/07 21:14
package com.expgiga.JUC;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 生产者消费者案例 */public class TestProductorAndConsumerForLock { public static void main(String[] args) { Clerk clerk = new Clerk(); Productor productor = new Productor(clerk); Consumer consumer = new Consumer(clerk); new Thread(productor, "生产者A").start(); new Thread(consumer, "消费者B").start(); new Thread(productor, "生产者C").start(); new Thread(consumer, "消费者D").start(); }}//店员class Clerk { private int product = 0; private Lock lock = new ReentrantLock(); private Condition condition = lock.newCondition(); //进货方法 public void get() { lock.lock(); try { while (product >= 1) { //为了避免虚假唤醒,应该总是使用在循环中 System.out.println("产品已满!"); try { condition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName() + " : " + ++product); condition.signalAll(); } finally { lock.unlock(); } } //卖货方法 public void sale() { lock.lock(); try { while (product <= 0) { System.out.println("产品缺货!"); try { condition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName() + " : " + --product); condition.signalAll(); } finally { lock.unlock(); } }}//生产者class Productor implements Runnable { private Clerk clerk; public Productor(Clerk clerk) { this.clerk = clerk; } @Override public void run() { for (int i = 0; i < 20; i++) { try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } clerk.get(); } }}//消费者class Consumer implements Runnable { private Clerk clerk; public Consumer(Clerk clerk) { this.clerk = clerk; } @Override public void run() { for (int i = 0; i < 20; i++) { clerk.sale(); } }}
阅读全文
0 0
- Lock 生产者消费者模型示例
- 使用Lock和Condition实现生产者消费者模型
- 生产者消费者模型(使用lock.condition进行分组唤醒)
- 生产者消费者模型(多个生产者和多个消费者)JDK1.5 (Lock&Condition)实现版
- Java线程同步:生产者-消费者 模型(代码示例)
- 生产者消费者示例一
- 生产者消费者示例二
- 生产者消费者示例三
- python 生产者消费者示例
- python生产者/消费者示例
- Java生产者消费者示例
- 多线程-生产者消费者lock锁
- 生产者-消费者模型
- 生产者/消费者模型
- 生产者 消费者模型
- 生产者消费者模型
- 生产者&&消费者模型
- 模拟生产者/消费者模型
- Java Lock使用示例
- 设置apt-get源
- 深度学习,图像分类,从vgg到inception,到resnet
- SpringMVC札集(07)——JSON数据
- GC算法与种类
- Lock 生产者消费者模型示例
- 2017 多校训练第二场 HDU 6052 To my boyfriend
- <<JavaScript高级程序设计>>读书笔记
- 浅谈扩展欧几里得
- UML关系(泛化,实现,依赖,关联(聚合,组合))
- ReadWriteLock使用示例
- c++随机数简单用法
- [Leetcode]_37 Sudoku Solver
- 【荐读】我观察14年才发现,那些很努力却没成就的人都有一个特点