R語言中grep函式
阿新 • • 發佈:2022-05-07
阻塞佇列
- 阻塞
- 寫入:如果佇列中資料滿了,就得阻塞等待
- 讀取:如果佇列中無資料,就得阻塞等待
- 佇列
- 佇列遵循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 } }