一輩子產與一消費:操做棧

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();
    }
}
相關文章
相關標籤/搜索