生产者消费者阻塞队列

class MyResource {

    private volatile boolean FLAG = true;
    private AtomicInteger atomicInteger = new AtomicInteger();
    BlockingQueue blockingQueue = null;


    public  MyResource(BlockingQueue blockingQueue ){
        this.blockingQueue=blockingQueue;
    }


    public void myProducer() {
        while (FLAG) {
            String data = atomicInteger.incrementAndGet() + "";
            boolean result = false;
            try {
                result = blockingQueue.offer(data, 2L, TimeUnit.SECONDS);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (result) {
                System.out.println(Thread.currentThread().getName() + "生产队列" + data + "成功");
            } else {
                System.out.println(Thread.currentThread().getName() + "生产队列" + data + "失败");
            }
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(Thread.currentThread().getName() + "老板叫停");
    }

    public void myConsumer()  {
        while (FLAG){
            String result= null;
            try {
                result = blockingQueue.poll(2L, TimeUnit.SECONDS);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (result == null || result.equalsIgnoreCase("")){
                FLAG=false;
                System.out.println(Thread.currentThread().getName()+"2s后取不到蛋糕,退出,消费叫停");
                return;
            }else {
                System.out.println(Thread.currentThread().getName()+"消费队列"+result+"成功");
            }
        }
    }

    public static void main(String[] args) {
        MyResource myResource = new MyResource(new ArrayBlockingQueue<>(10));
        new Thread(() -> {
            System.out.println(Thread.currentThread().getName()+"生产线程启动");
            myResource.myProducer();
        }, "producer").start();

        new Thread(() -> {
            System.out.println(Thread.currentThread().getName()+"消费线程启动");
            System.out.println();
            System.out.println();
            myResource.myConsumer();
        }, "comsumer").start();
        try {
            TimeUnit.SECONDS.sleep(5L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName()+"5秒钟后,生产叫停");
        myResource.FLAG = false;
    }

}

你可能感兴趣的:(生产者消费者阻塞队列)