LinkedBlockingQueue使用
生活随笔
收集整理的這篇文章主要介紹了
LinkedBlockingQueue使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
poll和peek方法出錯進返回null。因此,向隊列中插入null值是不合法的?
import java.util.concurrent.LinkedBlockingQueue;public class Main {public static void main(String[] args) {LinkedBlockingQueue<Integer> queue =new LinkedBlockingQueue<Integer>();for (int i = 1; i < 10; i++) {queue.add(i);}//先進先出,并刪除System.out.println(queue.poll());System.out.println(queue.poll());System.out.println(queue.poll());//獲取第一個元素·但不刪除System.out.println(queue.element());System.out.println(queue);} }LinkedBlockingQueue的容量是沒有上限的(說的不準確,在不指定時容量為Integer.MAX_VALUE,不要然的話在put時怎么會受阻呢),但是也可以選擇指定其最大容量,它是基于鏈表的隊列,此隊列按 FIFO(先進先出)排序元素。?
remove、element、offer?、poll、peek?其實是屬于Queue接口。?
?
測試隊列
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class BlockingQueueTest {/**定義裝蘋果的籃子*/public static class Basket{// 籃子,能夠容納3個蘋果BlockingQueue<String> basket = new ArrayBlockingQueue<String>(3);// 生產蘋果,放入籃子public void produce() throws InterruptedException{// put方法放入一個蘋果,若basket滿了,等到basket有位置basket.put("An apple");}// 消費蘋果,從籃子中取走public String consume() throws InterruptedException{// get方法取出一個蘋果,若basket為空,等到basket有蘋果為止String apple = basket.take();return apple;}public int getAppleNumber(){return basket.size();}}// 測試方法public static void testBasket() {// 建立一個裝蘋果的籃子final Basket basket = new Basket();// 定義蘋果生產者class Producer implements Runnable {public void run() {try {while (true) {// 生產蘋果System.out.println("生產者準備生產蘋果:" + System.currentTimeMillis());basket.produce();System.out.println("生產者生產蘋果完畢:" + System.currentTimeMillis());System.out.println("生產完后有蘋果:"+basket.getAppleNumber()+"個");// 休眠300msThread.sleep(300);}} catch (InterruptedException ex) {}}}// 定義蘋果消費者class Consumer implements Runnable {public void run() {try {while (true) {// 消費蘋果System.out.println("消費者準備消費蘋果:" + System.currentTimeMillis());basket.consume();System.out.println("消費者消費蘋果完畢:" + System.currentTimeMillis());System.out.println("消費完后有蘋果:"+basket.getAppleNumber()+"個");// 休眠1000msThread.sleep(1000);}} catch (InterruptedException ex) {}}}ExecutorService service = Executors.newCachedThreadPool();Producer producer = new Producer();Consumer consumer = new Consumer();service.submit(producer);service.submit(consumer);// 程序運行10s后,所有任務停止try {Thread.sleep(10000);} catch (InterruptedException e) {}service.shutdownNow();}public static void main(String[] args) {BlockingQueueTest.testBasket();} }?
總結
以上是生活随笔為你收集整理的LinkedBlockingQueue使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Set精讲(Java)·算法常用集合处理
- 下一篇: 第五章 Mininet常用命令参数介绍