關於Java集合類庫中的幾種常用隊列

來源:互聯網
上載者:User

標籤:取出   ack   ace   數組   inter   queue   多個   空閑   blocking   

Java中幾種常用的隊列

阻塞隊列與普通隊列的區別在於,當隊列是空的時,從隊列中擷取元素的操作將會被阻塞,或者當隊列是滿時,往隊列裡添加元素的操作會被阻塞。試圖從空的阻塞隊列中擷取元素的線程將會被阻塞,直到其他的線程往空的隊列插入新的元素。同樣,試圖往已滿的阻塞隊列中添加新元素的線程同樣也會被阻塞,直到其他的線程使隊列重新變得空閑起來,如從隊列中移除一個或者多個元素,或者完全清空隊列.

第一種:ConcurrentLinkedQueue,高效能無阻塞無界隊列

代碼demo:

 1       ConcurrentLinkedQueue<String> q = new ConcurrentLinkedQueue<String>(); 2         q.offer("a"); 3         q.offer("b"); 4         q.offer("c"); 5         q.offer("d"); 6         q.add("e"); 7          8         System.out.println(q.poll());    //a 從頭部取出元素,並從隊列裡刪除 9         System.out.println(q.size());    //410         System.out.println(q.peek());    //b11         System.out.println(q.size());    //4

第二種:ArrayBlockingQueue,基於數組的阻塞隊列,有界隊列

1       ArrayBlockingQueue<String> array = new ArrayBlockingQueue<String>(5);2         array.put("a");3         array.put("b");4         array.add("c");5         array.add("d");6         array.add("e");7         //array.add("f");8         System.out.println(array.offer("a", 3, TimeUnit.SECONDS));

第三種:LinkedBlockingQueue,阻塞隊列,無屆隊列

 1 LinkedBlockingQueue<String> q = new LinkedBlockingQueue<String>(); 2         q.offer("a"); 3         q.offer("b"); 4         q.offer("c"); 5         q.offer("d"); 6         q.offer("e"); 7         q.add("f"); 8         //System.out.println(q.size()); 9         10 //        for (Iterator iterator = q.iterator(); iterator.hasNext();) {11 //            String string = (String) iterator.next();12 //            System.out.println(string);13 //        }14         15         List<String> list = new ArrayList<String>();16         System.out.println(q.drainTo(list, 3));17         System.out.println(list.size());18         for (String string : list) {19             System.out.println(string);20         }

第四種:SynchronousQueue

 1 final SynchronousQueue<String> q = new SynchronousQueue<String>(); 2         Thread t1 = new Thread(new Runnable() { 3             @Override 4             public void run() { 5                 try { 6                     System.out.println(q.take()); 7                 } catch (InterruptedException e) { 8                     e.printStackTrace(); 9                 }10             }11         });12         t1.start();13         Thread t2 = new Thread(new Runnable() {14             15             @Override16             public void run() {17                 q.add("asdasd");18             }19         });20         t2.start();

 

關於Java集合類庫中的幾種常用隊列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.