java多线程之生产者消费者经典问题
2015-01-28 20:32
561 查看
package com.thread; /** * 此程序不仅可以加深对多线程的理解,并且可以加深对面向对象编程的理解 * 此程序并非是一个很完善的程序,阅读代码的过程中要发现发生死锁的原因以及找到解决问题的方法 * * cehkongfu:2015.1.28 */ class Factory { private int i = 0; private boolean created = false; public void create() { synchronized (this) { if (created) { try { wait(); } catch (InterruptedException e) { } } else { i = i + 1; System.out.println(Thread.currentThread().getName() + "-create-" + i); notify(); this.created = true; } } } public void consume() { synchronized (this) { if (created) { System.out.println(Thread.currentThread().getName() + "-consume-" + i); notify(); this.created = false; } else { try { wait(); } catch (InterruptedException e) { } } } } } abstract class AbsFactory implements Runnable { protected Factory factory = null; public AbsFactory(Factory factory) { this.factory = factory; } abstract protected void execute(); public void run() { while (true) { execute(); try { Thread.sleep(10); } catch (InterruptedException e) { } } } } class Producer extends AbsFactory { public Producer(Factory factory) { super(factory); } @Override protected void execute() { factory.create(); } } class Consumer extends AbsFactory { public Consumer(Factory factory) { super(factory); } @Override protected void execute() { factory.consume(); } } public class ProducerCustomer { public static void main(String[] args) { if (args.length == 0) { System.out .println("Usage:java com.wenhuisoft.chapter4.ProducerCustomer number"); System.out.println("Please restart again...."); System.exit(0); } int count = 0; try { count = Integer.parseInt(args[0]); } catch (Throwable t) { System.out.println("Please enter a integer type number..."); System.exit(0); } final Factory factory = new Factory(); for (int i = 0; i < count; i++) { new Thread(new Producer(factory)).start(); new Thread(new Consumer(factory)).start(); } } }
相关文章推荐
- java多线程之生产者消费者经典问题
- 多线程经典问题之生产者消费者问题的JAVA实现
- java多线程之生产者消费者经典问题
- java多线程-生产者消费者经典问题 基于BlockingQueue
- java多线程总结六:经典生产者消费者问题实现
- java多线程之生产者消费者经典问题
- java多线程之生产者消费者经典问题
- java多线程总结六:经典生产者消费者问题实现
- java多线程之生产者消费者经典问题
- java多线程经典的生产者消费者问题
- java 多线程经典例子——生产者与消费者的问题
- java多线程总结六:经典生产者消费者问题实现
- java多线程之生产者和消费者经典问题案例
- 多线程经典案例——生产者/消费者问题的Java实现与详解
- java多线程之生产者消费者经典问题
- java多线程实现生产者与消费者---经典问题
- java例程练习(多线程综合练习[生产者-消费者问题])
- 用JAVA实现多线程(生产者与消费者问题)
- java例程练习(多线程综合练习[生产者-消费者问题])
- 继续java多线程——生产者消费者类似问题