生产者消费者模式,并发采用ReentrantLock
来源:互联网 发布:mac怎么玩穿越火线 编辑:程序博客网 时间:2024/06/15 02:40
- package org.hkw.multithread;
- import java.util.concurrent.locks.Lock;
- import java.util.concurrent.locks.ReentrantLock;
- public class ThreadDCTest {
- public static void main(String[] args) {
- Thread p = new Thread(new Producer("p1"));
- Thread p2 = new Thread(new Producer("p2"));
- Thread c = new Thread(new Consumer("c1"));
- Thread c2 = new Thread(new Consumer("c2"));
- p.start();
- p2.start();
- c.start();
- c2.start();
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- // Storehouse.getInstance().close();
- c.interrupt();
- c2.interrupt();
- p.interrupt();
- p2.interrupt();
- }
- }
- class Storehouse {
- static final int STATUS_EMPETY = 0;
- static final int STATUS_FULL = 1;
- boolean isClosed = false;
- String item;
- int status;
- Lock lock = new ReentrantLock();
- private static Storehouse house =new Storehouse();
- private Storehouse() {
- }
- public static Storehouse getInstance() {
- return house;
- }
- public String getItem() {
- status = STATUS_EMPETY;
- return item;
- }
- public void setItem(String item) {
- status = STATUS_FULL;
- this.item = item;
- }
- public int getStatus() {
- return status;
- }
- public boolean isEmpty() {
- return status == STATUS_EMPETY;
- }
- public boolean isClosed() {
- return isClosed;
- }
- public void close() {
- isClosed = true;
- }
- public void produce(String name)throws InterruptedException {
- lock.lockInterruptibly();
- try {
- if (isEmpty()) {
- String item = name + " fill";
- System.out.println(name + " produce item:" + item);
- setItem(item);
- }
- } finally {
- lock.unlock();
- }
- }
- public void consum(String name)throws InterruptedException {
- lock.lockInterruptibly();
- try {
- if (!isEmpty()) {
- System.out.println(name + " consum item:" + house.getItem());
- }
- } finally {
- lock.unlock();
- }
- }
- }
- class Producer implements Runnable {
- Storehouse house = Storehouse.getInstance();
- String name;
- public Producer(String name) {
- this.name = name;
- }
- @Override
- public void run() {
- System.out.println(name + " producer start");
- while (!Thread.currentThread().isInterrupted() && !house.isClosed()) {
- try {
- house.produce(name);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- System.out.println(name + " producer interrupted");
- Thread.currentThread().interrupt();
- }
- }
- System.out.println(name + " producer end");
- }
- }
- 生产者消费者模式,并发采用ReentrantLock
- ReentrantLock方式实现生产者-消费者模式
- 使用ReentrantLock实现生产者消费者模式
- 并发设计模式之生产者-消费者模式
- 并发设计模式之生产者-消费者模式
- 生产者-消费者模式 系列 之二 ReentrantLock, Condition 篇
- java多线程--ReentrantLock实现生产者与消费者模式
- Java并发编程 生产者消费者模式
- 聊聊并发——生产者消费者模式
- 【并发编程】生产者与消费者模式
- 聊聊并发——生产者消费者模式
- 聊聊并发(十)生产者消费者模式
- Java并发编程:生产者-消费者模式
- 聊聊并发——生产者消费者模式
- Java并发编程:生产者消费者模式
- 聊聊并发(十)生产者消费者模式
- 聊聊并发(十)生产者消费者模式
- 聊聊并发——生产者消费者模式
- http请求报错
- 邻接矩阵实现图的广搜和深搜(java模板)
- 如何让js文件中不出现乱码
- 最新java编程面试题
- Linux下打开在Windows下创建的项目出现中文乱码
- 生产者消费者模式,并发采用ReentrantLock
- java生产者消费者模式代码
- JavaScript实现Struts2+Ajax返回文本字符串
- 关于抓java的dump中live参数
- JAVA经典算法40题(10)
- java中多维数组探讨及发散思考
- 和我一起学 Selenium WebDriver(4)——基础篇
- JCodeModel定义生成代码中的泛型变量
- JDBC DB TableName