1. 程式人生 > 其它 >R語言中grep函式

R語言中grep函式

阻塞佇列

  • 阻塞
    • 寫入:如果佇列中資料滿了,就得阻塞等待
    • 讀取:如果佇列中無資料,就得阻塞等待
  • 佇列
    • 佇列遵循FIFO規則
BlockingQueue族譜

BlockingQueue

四種API(四種方法)

方式 丟擲異常 不拋異常,正常返回值 阻塞等待 超時等待
新增 add offer put offer(E e, long timeout, TimeUnit unit)
移除 remove poll take E poll(long timeout, TimeUnit unit)
拿隊首元素 element peek -- --
public class Test1 {
    public static void main(String[] args) throws InterruptedException {
//        f1();
        f2();
//        f3();
//        f4();
    }

    /**
     *  當存不進或是取不出來會丟擲異常
     */
    public static void f1(){
        BlockingQueue queue = new ArrayBlockingQueue<>(3);//需要指定大小
        System.out.println("-------------存---------------");
        System.out.println(queue.add("a"));
        System.out.println(queue.add("b"));
        System.out.println(queue.add("c"));
        //拿到對首元素 對首沒有元素丟擲異常 java.util.NoSuchElementException
        System.out.println(queue.element());
        //java.lang.IllegalStateException: Queue full
        System.out.println(queue.add("d"));
        System.out.println("-------------取---------------");
        System.out.println(queue.remove());
        System.out.println(queue.remove());
        System.out.println(queue.remove());
        //java.util.NoSuchElementException
//        System.out.println(queue.remove());
    }

    /**
     *  當存不進不會丟擲異常 返回false
     *   取不出來不會丟擲異常 返回null
     */
    public static void f2(){
        BlockingQueue queue = new ArrayBlockingQueue<>(3);//需要指定大小
        System.out.println("-------------存---------------");
        System.out.println(queue.offer("a"));
        System.out.println(queue.offer("b"));
        System.out.println(queue.offer("c"));
        System.out.println(queue.offer("d"));//false
        //對首有元素取出 沒有為null
        System.out.println(queue.peek());
        System.out.println("-------------取---------------");
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());//null
    }

    /**
     *  當存不進或取不出不會丟擲異常
     *  會一直阻塞等待 程式就死了
     */
    public static void f3() throws InterruptedException {
        BlockingQueue queue = new ArrayBlockingQueue<>(3);//需要指定大小
        System.out.println("-------------存---------------");
        queue.put("a");
        queue.put("b");
        queue.put("c");
//        queue.put("d");
        System.out.println("-------------取---------------");
        System.out.println(queue.take());
        System.out.println(queue.take());
        System.out.println(queue.take());
//        System.out.println(queue.take());
    }

    /**
     *  當存不進不會丟擲異常 會進行阻塞等待 等待時間自己設定 等待不到就返回false
     *   取不出來不會丟擲異常 會進行阻塞等待 等待時間自己設定 等待不到就返回null
     */
    public static void f4() throws InterruptedException {
        BlockingQueue queue = new ArrayBlockingQueue<>(3);//需要指定大小
        System.out.println("-------------存---------------");
        System.out.println(queue.offer("a", 2, TimeUnit.SECONDS));
        System.out.println(queue.offer("b", 2, TimeUnit.SECONDS));
        System.out.println(queue.offer("c", 2, TimeUnit.SECONDS));
        System.out.println(queue.offer("d", 2, TimeUnit.SECONDS));//false
        System.out.println("-------------取---------------");
        System.out.println(queue.poll(2, TimeUnit.SECONDS));
        System.out.println(queue.poll(2, TimeUnit.SECONDS));
        System.out.println(queue.poll(2, TimeUnit.SECONDS));
        System.out.println(queue.poll(2, TimeUnit.SECONDS));//null
    }
}