阻塞队列之:SynchronousQueue

342 阅读1分钟

SynchronousQueue

  • 记住不存储,生产一个,消费一个;

测试代码


/**
 *同步队列,不存储,产生一个消费一个;
 */
public class SynchronousQueueDemo {
    static BlockingQueue<String> blockingDeque = new SynchronousQueue<>();
    public static void main(String[] args) {
        SynchronousQueueDemo synchronousQueueDemo = new SynchronousQueueDemo();
        new Thread(new TaskOne(blockingDeque), "生产线程").start();
        new Thread(new TaskTwo(blockingDeque), "消费线程").start();
    }
    
    static class TaskOne implements Runnable {
        BlockingQueue<String> blockingDeque;

        public TaskOne(BlockingQueue<String> blockingDeque) {
            this.blockingDeque = blockingDeque;
        }

        @Override
        public void run() {
            try {
                System.out.println(Thread.currentThread().getName()+" 生产 1");
                blockingDeque.put("1");
                System.out.println(Thread.currentThread().getName()+" 生产 2");
                blockingDeque.put("2");
                System.out.println(Thread.currentThread().getName()+" 生产 3");
                blockingDeque.put("3");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    static class TaskTwo implements Runnable {
        BlockingQueue<String> blockingDeque;

        public TaskTwo(BlockingQueue<String> blockingDeque) {
            this.blockingDeque = blockingDeque;
        }

        @Override
        public void run() {
            try {
                while (true) {
                    Thread.sleep(3000);
                    String take = blockingDeque.take();
                    System.out.println(Thread.currentThread().getName()+" 消费 "+take);
                    System.out.println("|---------------------------------------|");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }
    
}

打印结果

生产线程 生产 1
消费线程 消费 1
|---------------------------------------|
生产线程 生产 2
消费线程 消费 2
|---------------------------------------|
生产线程 生产 3
消费线程 消费 3
|---------------------------------------|

ps

  • 不学不知道,一学,不知道;