/**
* 多线程,生产者与消费者
* 使用多线程解决生产者和消费者问题,必须使用while循环和nitifyAll()。
* @author Again
*
*/
class ProductCustomerDemo {
public static void main(String[] args) {
Resource r=new Resource();
Product p=new Product(r);
Customer c=new Customer(r);
Thread t1=new Thread(p);
Thread t2=new Thread(p);
Thread t3=new Thread(c);
Thread t4=new Thread(c);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class Resource{
private String name;
private int count=1;
private boolean flag=false;
/*
* 生产者
*/
public synchronized void set(String name){
while(flag){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
this.name=name+"....."+count++;
System.out.println(Thread.currentThread().getName()+"----生产者----"+this.name);
flag=true;
this.notifyAll();
}
/*
* 消费者
*/
public synchronized void out(){
while(!flag){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"---------消费者---------"+this.name);
flag=false;
this.notifyAll();
}
}
class Product implements Runnable{
private Resource r;
public Product(Resource r){
this.r=r;
}
public void run() {
while(true){
r.set("商品");
}
}
}
class Customer implements Runnable{
private Resource r;
public Customer(Resource r){
this.r=r;
}
public void run() {
while(true){
r.out();
}
}
}
多线程生产者和消费者例子
最新推荐文章于 2018-12-20 23:49:29 发布