java 阻塞队列、同步队列总结

阻塞队列

public class demo1 {
          
   
    /**
     * 阻塞队列
     * <p>
     * 会抛出异常
     * java.lang.IllegalStateException: Queue full
     * <p>
     * java.util.NoSuchElementException
     * @param args
     */
    public static void main(String[] args) {
          
   
        ArrayBlockingQueue<Object> queue = new ArrayBlockingQueue<>(3);
        queue.add(1);
        queue.add(2);
        queue.add(3);
//        queue.add(4);
        System.out.println(queue.remove());
        System.out.println(queue.remove());
        System.out.println(queue.remove());
        System.out.println(queue.remove());
    }
}

同步队列

public class demo5 {
          
   
    /**
     * 同步队列
     * 没有容量,
     * 进去一个元素,必须等待取出来之后,才能再往里面放一个元素!
     *
     * @param args
     */
    public static void main(String[] args) throws InterruptedException {
          
   
        /**
         * 同步队列不存在容量的问题,它本身不存放元素,
         *
         * put值之后, 必须take取出, 否则就不能继续put元素, 就会一直等待take元素
         */
        SynchronousQueue<Object> queue = new SynchronousQueue<>();
        new Thread(() -> {
          
   
            try {
          
   
                System.out.println(Thread.currentThread().getName() + "-> put" + 1);
                queue.put(1);
                System.out.println(Thread.currentThread().getName() + "-> put" + 2);
                queue.put(2);
            } catch (InterruptedException e) {
          
   
                e.printStackTrace();
            }
        }, "a").start();

        new Thread(() -> {
          
   
            try {
          
   
                TimeUnit.SECONDS.sleep(3);
                System.out.println(Thread.currentThread().getName() + "-> take" + 1);
                queue.take();
                TimeUnit.SECONDS.sleep(3);
                System.out.println(Thread.currentThread().getName() + "-> take" + 2);
                queue.take();
            } catch (InterruptedException e) {
          
   
                e.printStackTrace();
            }
        }, "b").start();
    }
}
经验分享 程序员 微信小程序 职场和发展