SynchronousQueue 同步队列

SynchronousQueue 同步队列

  • 没有容量,
    进去一个元素,必须等待取出来之后,才能再往里面放一个元素!
    put、take

  • public class Test01 {
        /**
         * 同步队列
         * 和其他的BlockingQueue 不一样, SynchronousQueue 不存储元素
         * put了一个元素,必须从里面先take取出来,否则不能在put进去值!
         */
        public static void main(String[] args) throws InterruptedException {
            SynchronousQueue<String> synchronousQueue = new SynchronousQueue<>();
            new Thread(() -> {
                try {
                    System.out.println(Thread.currentThread().getName() + "put 1");
                    synchronousQueue.put("1");
                    System.out.println(Thread.currentThread().getName() + "put 2");
                    synchronousQueue.put("2");
                    System.out.println(Thread.currentThread().getName() + "put 3");
                    synchronousQueue.put("3");
                } catch (Exception e) {
                    e.printStackTrace();
                }
    
            }, "小明").start();
    
            new Thread(() -> {
                try {
                    TimeUnit.SECONDS.sleep(3);
                    System.out.println(Thread.currentThread().getName() + "take" + synchronousQueue.take());
                    TimeUnit.SECONDS.sleep(3);
                    System.out.println(Thread.currentThread().getName() + "take" + synchronousQueue.take());
                    TimeUnit.SECONDS.sleep(3);
                    System.out.println(Thread.currentThread().getName() + "take" + synchronousQueue.take());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }, "小红").start();
        }
    }
    
posted @ 2021-05-04 13:03  saxon宋  阅读(65)  评论(0)    收藏  举报