步骤同一生产与一消费,区别在于测试类代码如下:
public class Test {
public static void main(String[] args) {
MyStack myStack = new MyStack();
Produce produce = new Produce(myStack);
Consumer consumer1 = new Consumer(myStack);
Consumer consumer2 = new Consumer(myStack);
Consumer consumer3 = new Consumer(myStack);
Consumer consumer4 = new Consumer(myStack);
Consumer consumer5 = new Consumer(myStack);
ThreadProduce threadProduce = new ThreadProduce(produce);
ThreadConsumer threadConsumer1 = new ThreadConsumer(consumer1);
ThreadConsumer threadConsumer2 = new ThreadConsumer(consumer2);
ThreadConsumer threadConsumer3 = new ThreadConsumer(consumer3);
ThreadConsumer threadConsumer4 = new ThreadConsumer(consumer4);
ThreadConsumer threadConsumer5 = new ThreadConsumer(consumer5);
threadProduce.start();
threadConsumer1.start();
threadConsumer2.start();
threadConsumer3.start();
threadConsumer4.start();
threadConsumer5.start();
}
}
注意:运行代码会出现数组越界异常
处理方法:将MyStack的push方法和pop方法中的“if”条件修改为“while”
再次运行代码
注意:运行代码后出现“假死”情况
处理方法:将MyStack的push方法和pop方法中的notify()方法修改为notifyAll()方法