多线程:生产者消费者实例
2014-12-07 21:32
253 查看
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 生产者消费者实例 */ public class ProducerAndConsumer { public static void main(String[] args) { Bakery bakery = new Bakery(); Producer producer = new Producer(bakery); Consumer consumer = new Consumer(bakery); Thread t1 = new Thread(producer); Thread t2 = new Thread(producer); Thread t3 = new Thread(consumer); Thread t4 = new Thread(consumer); t1.start(); t2.start(); t3.start(); t4.start(); } } /** * 定义面包房 */ class Bakery { private int count = 1; private String name; // 定义是否有面包 private boolean flag; // 定义生产者和消费者线程锁 Lock lock = new ReentrantLock(); // 定义生产者和消费者的监视器 private Condition pro_con = lock.newCondition(); private Condition con_con = lock.newCondition(); /** * 生产面包方法 */ public void produceBread(String name) { lock.lock(); try { while (flag) try { pro_con.await(); } catch (InterruptedException e) { } this.name = count + "个" + name; count++; System.out.println(Thread.currentThread().getName() + "面包房生产了第" + this.name); this.flag = true; con_con.signal(); } finally { // 必须进行锁的释放,否者可能代码中可能出现的异常,导致造成死锁等线程安全问题 lock.unlock(); } } /** * 售卖面包方法 */ public void consumeBread() { lock.lock(); try { while (!flag) try { con_con.await(); } catch (InterruptedException e) { } System.out.println(Thread.currentThread().getName() + "消费者买了第" + this.name); this.flag = false; pro_con.signal(); } finally { // 必须进行锁的释放,否者可能代码中可能出现的异常,导致造成死锁等线程安全问题 lock.unlock(); } } } class Producer implements Runnable { private Bakery bakery; Producer(Bakery bakery) { this.bakery = bakery; } @Override public void run() { while (true) bakery.produceBread("面包"); } } class Consumer implements Runnable { private Bakery bakery; Consumer(Bakery bakery) { this.bakery = bakery; } @Override public void run() { while (true) bakery.consumeBread(); } }
相关文章推荐
- Java多线程之生产者消费者实例
- Linux下的多线程机制--生产者和消费者实例
- JAVA多线程实例(生产者与消费者问题)
- 多线程——等待唤醒机制经典实例:生产者消费者模式
- java之多线程实例 生产者与消费者
- JAVA多线程模拟生产者与消费者_实例
- 基于java多线程来实现生产者和消费者的实例
- 多线程操作实例——生产者与消费者
- java多线程交互 经典实例__生产者与消费者模型
- 黑马程序员_多线程:生产者消费者练习实例及问题
- java中多线程通信实例:生产者消费者模式
- Linux多线程消费者和生产者模型实例(互斥锁和条件变量使用)
- 多线程实例三----多生产者多消费者(模拟kfc多生产和多消费)
- 经典多线程Java实例 生产者与消费者
- 黑马程序员——多线程操作经典实例:生产者消费者问题
- Java多线程生产者消费者实例
- Linux C++ 面向对象多线程编程实例之“生产者-消费者”
- 多线程之消费者与生产者1.5前后实例
- 经典多线程实例:生产者消费者问题
- 多线程实现生产者消费者