要求:
1.把栈改造为支持线程安全
2.当栈里的数据是0的时候,访问pull的线程就会等待。
3.当栈里的数据是200的时候,访问push的线程就会等待
4. 提供一个生产者(Producer)线程类,生产随机大写字符压入到堆栈
5. 提供一个消费者(Consumer)线程类,从堆栈中弹出字符并打印到控制台
6. 提供一个测试类,使两个生产者和三个消费者线程同时运行
结果
Producer1 push: B
Producer2 push: D
Consumer3 pull: B
Consumer2 pull: D
Producer2 push: J
Producer1 push: L
Consumer3 pull: J
Consumer1 pull: L
Producer2 push: I
Producer1 push: Q
Consumer1 pull: I
Consumer2 pull: Q
Producer2 push: B
Producer1 push: O
Consumer2 pull: B
Consumer3 pull: O
Producer2 push: N
构造支持安全线程的栈
package TestThread;
import java.util.LinkedList;
//构造支持安全线程的栈
public class MyStackThread<T> {
//初始化链表
LinkedList<T> values = new LinkedList<T>();
//设计push方法,当列表中的元素大于200时,push线程等待(生产者),否则唤醒全部
public synchronized void push(T t){
while(values.size()>=200){
try{
this.wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
this.notifyAll();
values.addLast