Java基础多线程间通讯之多生产者、多消费者模式示例:
2013-01-15 12:15
726 查看
class ProducerConsumerDemo
{
public static void main(String[] args)
{
Product product = new Product();
new Thread(new Producer(product)).start();
new Thread(new Consumer(product)).start();
new Thread(new Producer(product)).start();
new Thread(new Consumer(product)).start();
new Thread(new Producer(product)).start();
new Thread(new Consumer(product)).start();
new Thread(new Producer(product)).start();
new Thread(new Consumer(product)).start();
}
}
class Product
{
private int count;
private boolean flag;
public synchronized void create()
{
while(this.flag)
{
try
{
this.wait();
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
}
this.count++;
System.out.println(Thread.currentThread().getName()+" create -- :"+this.count);
this.flag = true;
this.notifyAll();
try
{
Thread.sleep(300);
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
}
public synchronized void get()
{
while(!this.flag)
{
try
{
this.wait();
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
}
System.out.println(Thread.currentThread().getName()+" sale:"+this.count);
this.flag = false;
this.notifyAll();
try
{
Thread.sleep(600);
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
}
}
class Producer implements Runnable
{
private Product product;
public Producer(Product product)
{
this.product = product;
}
public void run()
{
while(true)
{
product.create();
}
}
}
class Consumer implements Runnable
{
private Product product;
public Consumer(Product product)
{
this.product = product;
}
public void run()
{
while(true)
{
product.get();
}
}
}
{
public static void main(String[] args)
{
Product product = new Product();
new Thread(new Producer(product)).start();
new Thread(new Consumer(product)).start();
new Thread(new Producer(product)).start();
new Thread(new Consumer(product)).start();
new Thread(new Producer(product)).start();
new Thread(new Consumer(product)).start();
new Thread(new Producer(product)).start();
new Thread(new Consumer(product)).start();
}
}
class Product
{
private int count;
private boolean flag;
public synchronized void create()
{
while(this.flag)
{
try
{
this.wait();
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
}
this.count++;
System.out.println(Thread.currentThread().getName()+" create -- :"+this.count);
this.flag = true;
this.notifyAll();
try
{
Thread.sleep(300);
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
}
public synchronized void get()
{
while(!this.flag)
{
try
{
this.wait();
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
}
System.out.println(Thread.currentThread().getName()+" sale:"+this.count);
this.flag = false;
this.notifyAll();
try
{
Thread.sleep(600);
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
}
}
class Producer implements Runnable
{
private Product product;
public Producer(Product product)
{
this.product = product;
}
public void run()
{
while(true)
{
product.create();
}
}
}
class Consumer implements Runnable
{
private Product product;
public Consumer(Product product)
{
this.product = product;
}
public void run()
{
while(true)
{
product.get();
}
}
}
相关文章推荐
- Java基础之多线程(二)--通讯、生产者消费者、停止、Jion方法
- 【Java多线程】多线程之间实现通讯与生产者与消费者模式
- java多线程—消费者生产者模式
- Java多线程㈣—①线程间通讯(生产者及消费者)
- Java基础多线程间通讯示例操作(已优化)二:
- Java多线程设计(四)生产者/消费者模式
- Java多线程 - 实现生产者与消费者模式
- (10)Java多线程之再看生产者/消费者模式
- Java多线程之并发协作生产者消费者设计模式JDK1.5.0+升级优化版
- 【Java多线程】生产者消费者模式
- java多线程之消费者生产者模式
- java多线程之消费者生产者模式
- Java多线程之并发协作生产者消费者设计模式
- Java多线程之线程间通信--生产者/消费者模式
- java 多线程 22 :生产者/消费者模式 进阶 利用await()/signal()实现
- Java Note: 多线程的同步(互斥锁)的方法对比,信号量锁,读写锁的实现,生产者-消费者模式的实现
- java技术深入(一)——java多线程(七)——阻塞队列,生产者-消费者模式
- Java Note: 多线程的同步(互斥锁)的方法对比,信号量锁,读写锁的实现,生产者-消费者模式的实现
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- Java多线程——使用wait/notify实现生产者/消费者模式