public static void main(String[] args) {
ResourceDemo04 resd04 = new ResourceDemo04();
Producer pro = new Producer(resd04);
Consumer con = new Consumer(resd04);
//新需求一,在需求的基础上进行增加生产者和消费者,以两个生产者和两个消费者为例
Thread t1 = new Thread(pro);
Thread t2 = new Thread(con);
Thread t3 = new Thread(pro);
Thread t4 = new Thread(con);
t1.start();
t2.start();
t3.start();
t4.start();
}
}*/
//*************************************************************************************
//3.对新需求一进行修改:把负责生产的代码块中的if(flag)改为while(flag)的情况后,会怎样的一种情况呢?
/*
* 截取的本程序运行的结果,其中会出现程序停止运行的情况。出现这种情况的原因是:两个生产者和两个消费者均处于等待状态(可以进行分析为什么会发生这样的情况?)
Thread-0++++++商品......10
Thread-1------商品......10
Thread-0++++++商品......11
Thread-1------商品......11
Thread-0++++++商品......12
Thread-1------商品......12
Thread-0++++++商品......13
Thread-1------商品......13
Thread-0++++++商品......14
Thread-1------商品......14
Thread-0++++++商品......15
*/
class ResourceDemo04{
private String name;
private int count;
public boolean flag = false;
public synchronized void set(String name){
while(flag)
try {
this.wait();
} catch (Exception e) {}
this.name = name+"......"+count++;
System.out.println(Thread.currentThread().getName()+"++++++"+this.name);
flag = true;
this.notify();
}
public synchronized void out(){
while(!flag)
try {
this.wait();
} catch (Exception e) {}
System.out.println(Thread.currentThread().getName()+"------"+this.name);
flag = false;
this.notify();
}
}
class Producer implements Runnable{
private ResourceDemo04 resd04;
Producer(ResourceDemo04 resd04){
this.resd04 = resd04;
}
@Override
public void run() {
while(true){
resd04.set("商品");
}
}
}
class Consumer implements Runnable{
private ResourceDemo04 resd04;
Consumer(ResourceDemo04 resd04){
this.resd04 = resd04;
}
@Override
public void run() {
while(true){
resd04.out();
}
}
}
public class InputOutputThreadDemo04 {
public static void main(String[] args) {
ResourceDemo04 resd04 = new ResourceDemo04();
Producer pro = new Producer(resd04);
Consumer con = new Consumer(resd04);
//新需求一,在需求的基础上进行增加生产者和消费者,以两个生产者和两个消费者为例
Thread t1 = new Thread(pro);
Thread t2 = new Thread(con);
Thread t3 = new Thread(pro);
Thread t4 = new Thread(con);