1:建立棧代碼以下java
public class MyStack { private List list = new ArrayList(); synchronized public void push() { try { if (list.size() == 1) { this.wait(); } list.add("anyString = " + Math.random()); this.notify(); System.out.println("push = " + list.size() + " value = " + list.get(0)); } catch (InterruptedException e) { e.printStackTrace(); } } synchronized public String pop() { String returnValue = ""; try { if (list.size() == 0) { System.out.println("pop操做中的:" + Thread.currentThread().getName() + " 線程呈wait狀態"); this.wait(); } returnValue = "" + list.get(0); System.out.println("pop操做中的:" + Thread.currentThread().getName() + "棧中的值:" + returnValue); list.remove(0); this.notify(); System.out.println("pop操做中的:" + Thread.currentThread().getName() + "消費結束"); } catch (InterruptedException e) { e.printStackTrace(); } return returnValue; } }
2:建立生產者服務類dom
public class Produce { private MyStack myStack; public Produce(MyStack myStack) { this.myStack = myStack; } public void pushService() { myStack.push(); } }
3:建立消費者服務類ide
public class Consumer { private MyStack myStack; public Consumer(MyStack myStack) { this.myStack = myStack; } public void popService() { System.out.println("消費者服務類:" + myStack.pop()); } }
4:建立生產者線程類測試
public class ThreadProduce extends Thread { private Produce produce; public ThreadProduce (Produce produce) { this.produce = produce; } @Override public void run() { while (true) { produce.pushService(); } } }
5:建立消費者線程類this
public class ThreadConsumer extends Thread { private Consumer consumer; public ThreadConsumer(Consumer consumer) { this.consumer = consumer; } @Override public void run() { while (true) { consumer.popService(); } } }
6:建立測試類線程
public class Test { public static void main(String[] args) { MyStack myStack = new MyStack(); Produce produce = new Produce(myStack); Consumer consumer = new Consumer(myStack); ThreadProduce threadProduce = new ThreadProduce(produce); ThreadConsumer threadConsumer = new ThreadConsumer(consumer); threadProduce.start(); threadConsumer.start(); } }