package duoxiancheng;
//多生产者消费者(多条线程输入,多条线程输出)
class ResP
{
private String name;
private int count=1 ;
private boolean flag=false;
public synchronized void set(String name)
{
while(flag)//每次等待都要判断,if会发生不判断直接执行的情况
try {
this.wait();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
this.name=name+"+++"+count++;
System.out.println(Thread.currentThread().getName()+"..."+this.name);
this.flag=true;
this.notifyAll();//每次唤醒所有线程,防止线程全部等待而冻结
}
public synchronized void out()
{
while(!flag)
try {
this.wait();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"...***"+this.name);
this.flag=false;
this.notifyAll();//注意:此处要加this
}
}
class Producer implements Runnable
{
ResP r;
Producer(ResP r)
{
this.r=r;
}
public void run()
{
while(true)
r.set("goods");
}
}
class Customer implements Runnable
{
ResP r;
Customer(ResP r)
{
this.r=r;
}
public void run()
{
while(true)
r.out();
}
}
public class ProducerCustomerDemo {
public static void main(String [] args)
{
ResP r=new ResP();
new Thread(new Producer(r)).start();
new Thread(new Producer(r)).start();
new Thread(new Customer(r)).start();
new Thread(new Customer(r)).start();
}
}
(多线程)ProducerCustomerDemo
最新推荐文章于 2023-11-12 11:35:54 发布