其他分享
首页 > 其他分享> > LinkedBlockingQueue的3对易混API

LinkedBlockingQueue的3对易混API

作者:互联网

目录

3对API结论

放入测试

取出测试

 

3对API结论

Level.放入 取出 
1add队列满?异常:return trueremove队列空?异常:return head
2offer队列满?return false:return truepoll队列空?return null:return head
3put队列满?阻塞:return [void]take队列空?阻塞:return head

放入测试

public static void main(String[] args) throws Exception {
       new Thread(() -> {
            BlockingQueue<String> queue = new LinkedBlockingQueue<>(1);
            try {
                queue.put("1");
                queue.put("1"); //满时阻塞
                System.out.println("不打印我");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        new Thread(() -> {
            BlockingQueue<String> queue = new LinkedBlockingQueue<>(1);
            System.out.println("offer1"+queue.offer("1"));
            System.out.println("offer2"+queue.offer("1"));//满时返回false
        }).start();

        new Thread(() -> {
            BlockingQueue<String> queue = new LinkedBlockingQueue<>(1);
            System.out.println("add1"+queue.add("1"));
            System.out.println("add2"+queue.add("1"));//满时异常
        }).start();


       
    }

offer1true
offer2false
add1true
Exception in thread "Thread-2" java.lang.IllegalStateException: Queue full
    at java.util.AbstractQueue.add(AbstractQueue.java:98)
    at com.construn.vehicle.common.core.monitor.App.lambda$main$2(App.java:30)
    at com.construn.vehicle.common.core.monitor.App$$Lambda$3/1982791261.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)

 


public static void main(String[] args) throws Exception {

         new Thread(() -> {
            BlockingQueue<String> queue = new LinkedBlockingQueue<>(Lists.newArrayList("AAA"));
            try {
                System.out.println("take1"+queue.take());
                System.out.println("take2"+queue.take()); //空时阻塞
                System.out.println("不打印我");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        new Thread(() -> {
            BlockingQueue<String> queue = new LinkedBlockingQueue<>(Lists.newArrayList("AAA"));
            System.out.println("poll1"+queue.poll());
            System.out.println("poll2"+queue.poll());//空时返回null
        }).start();

        new Thread(() -> {
            BlockingQueue<String> queue = new LinkedBlockingQueue<>(Lists.newArrayList("AAA"));
            System.out.println("remove1"+queue.remove());
            System.out.println("remove2"+queue.remove());//空时异常
        }).start();




    }

remove1AAA
poll1AAA
poll2null
take1AAA
Exception in thread "Thread-2" java.util.NoSuchElementException
    at java.util.AbstractQueue.remove(AbstractQueue.java:117)
    at com.construn.vehicle.common.core.monitor.App.lambda$main$2(App.java:54)
    at com.construn.vehicle.common.core.monitor.App$$Lambda$3/1982791261.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)

标签:Thread,LinkedBlockingQueue,System,queue,API,println,new,对易,out
来源: https://blog.csdn.net/qq_39506978/article/details/113986914