生产者消费者阻塞队列

package html;

import java.util.LinkedList;
import java.util.List;

public class KF {

    public static void main(String[] args) {
        BlockList list = new BlockList(10);
        new Thread(new Productor(list)).start();
        new Thread(new Consumer(list)).start();
    }

    static class Productor implements Runnable {
        BlockList list;

        public Productor(BlockList list) {
            this.list = list;
        }

        @Override
        public void run() {
            int i = 0;
            while (true) {
                System.err.println("put:" + i);
                list.put(i++);
            }
        }
    }

    static class Consumer implements Runnable {
        BlockList list;

        public Consumer(BlockList list) {
            this.list = list;
        }

        @Override
        public void run() {
            while (true) {
                Object obj = list.get();
                System.err.println("get:" + obj);
            }
        }
    }
}

class BlockList {
    List<Object> list;
    int capacity;

    public BlockList(int capacity) {
        this.capacity = capacity;
        list = new LinkedList<>();
    }

    public boolean put(Object obj) {
        synchronized (list) {
            while (list.size() >= capacity) {
                try {
                    list.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            list.add(obj);
            list.notifyAll();
        }

        return false;
    }

    public Object get() {
        Object obj = null;
        synchronized (list) {
            while (list.isEmpty()) {
                try {
                    list.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            obj = list.remove(0);
            list.notifyAll();
        }
        return obj;
    }

}

 

posted on 2017-08-21 15:13  jis117  阅读(187)  评论(0编辑  收藏  举报

导航