Programación concurrente BlockingQueue de JUC (10)

 Cola de bloqueo

 Agregar eliminar

Cuatro conjuntos de API

la manera Lanzar una excepción No se lanza ninguna excepción si hay un valor de retorno Espera de bloqueo Tiempo de espera agotado
añadir añadir() oferta() poner() oferta (,,)
Eliminar eliminar() encuesta() tomar() encuesta( , )
Juzga el elemento líder elemento() ojeada()    

 

 

 

 

 

Lanzar una excepción

//抛出异常
    public static  void test1(){
        //队列的大小
        ArrayBlockingQueue<Object> blockingQueue = new ArrayBlockingQueue<>(3);
        System.out.println(blockingQueue.add("a"));//true
        System.out.println(blockingQueue.add("b"));//true
        System.out.println(blockingQueue.add("C"));//true

        System.out.println(blockingQueue.element());//查看队首元素
        System.out.println("-----------------------");
        //java.lang.IllegalStateException Queue full 抛出异常
//        System.out.println(blockingQueue.add("d"));
        System.out.println(blockingQueue.remove());//a
        System.out.println(blockingQueue.element());//查看队首元素
        System.out.println(blockingQueue.remove());//b
        System.out.println(blockingQueue.remove());//c

        //java.util.NoSuchElementException
//        System.out.println(blockingQueue.remove());

    }

 

No se lanza ninguna excepción si hay un valor de retorno

//有返回值不抛出异常
    public static void test2(){
        ArrayBlockingQueue<Object> blockingQueue = new ArrayBlockingQueue<>(3);
        System.out.println(blockingQueue.offer("a"));//true
        System.out.println(blockingQueue.offer("b"));//true
        System.out.println(blockingQueue.offer("c"));//true

        System.out.println(blockingQueue.peek());//查看队首元素

        System.out.println(blockingQueue.offer("d"));//false 不抛出异常
        System.out.println("==============");
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());//null 不抛出异常

    }

 

Espera de bloqueo

//阻塞等待
    public static void test3() throws InterruptedException {
        ArrayBlockingQueue<Object> blockingQueue = new ArrayBlockingQueue<>(3);
        blockingQueue.put("a");
        blockingQueue.put("b");
        blockingQueue.put("c");

//        blockingQueue.put("d");//队列没有位置,阻塞 一直等待
        System.out.println(blockingQueue.take());
        System.out.println(blockingQueue.take());
        System.out.println(blockingQueue.take());
        System.out.println(blockingQueue.take());//没有这个元素 一直阻塞
    }

Tiempo de espera agotado

//超时等待
    public static void test4() throws InterruptedException {
        ArrayBlockingQueue<Object> blockingQueue = new ArrayBlockingQueue<>(3);
        blockingQueue.offer("a");
        blockingQueue.offer("b");
        blockingQueue.offer("c");
//        blockingQueue.offer("d",2, TimeUnit.SECONDS);//等待超过2秒就退出

        System.out.println("==================");
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println( blockingQueue.poll(2,TimeUnit.SECONDS));;//等待超过2秒就退出

 

 

Supongo que te gusta

Origin blog.csdn.net/weixin_45480785/article/details/105365119
Recomendado
Clasificación