91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中TransferQueue的示例分析

發布時間:2021-07-22 16:05:43 來源:億速云 閱讀:170 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“java中TransferQueue的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“java中TransferQueue的示例分析”這篇文章吧。

TransferQueue

TransferQueue(java7引入)繼承了BlockingQueue(BlockingQueue又繼承了Queue)并擴展了一些新方法。生產者會一直阻塞直到所添加到隊列的元素被某一個消費者所消費(不僅僅是添加到隊列里就完事)。

LinkedTransferQueue

LinkedTransferQueue實際上是ConcurrentLinkedQueue、SynchronousQueue(公平模式)和LinkedBlockingQueue的超集。而且LinkedTransferQueue更好用,因為它不僅僅綜合了這幾個類的功能,同時也提供了更高效的實現。

對比SynchronousQueue

SynchronousQueue使用兩個隊列(一個用于正在等待的生產者、另一個用于正在等待的消費者)和一個用來保護兩個隊列的鎖。而LinkedTransferQueue使用CAS操作實現一個非阻塞的方法,這是避免序列化處理任務的關鍵。

使用場景

當我們不想生產者過度生產消息時,TransferQueue可能非常有用,可避免發生OutOfMemory錯誤。在這樣的設計中,消費者的消費能力將決定生產者產生消息的速度。

實例

public class LinkedTransferQueueDemo {
static LinkedTransferQueue<String> lnkTransQueue = new LinkedTransferQueue<String>();
public static void main(String[] args) {
ExecutorService exService = Executors.newFixedThreadPool(2);
Producer producer = new LinkedTransferQueueDemo().new Producer();
Consumer consumer = new LinkedTransferQueueDemo().new Consumer();
exService.execute(producer);
exService.execute(consumer);
exService.shutdown();
}
class Producer implements Runnable{
@Override
public void run() {
for(int i=0;i<3;i++){
try {
System.out.println("Producer is waiting to transfer...");
lnkTransQueue.transfer("A"+i);
System.out.println("producer transfered element: A"+i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
@Override
public void run() {
for(int i=0;i<3;i++){
try {
System.out.println("Consumer is waiting to take element...");
String s= lnkTransQueue.take();
System.out.println("Consumer received Element: "+s);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}

輸出

Producer is waiting to transfer...
Consumer is waiting to take element...
producer transfered element: A0
Producer is waiting to transfer...
Consumer received Element: A0
Consumer is waiting to take element...
producer transfered element: A1
Producer is waiting to transfer...
Consumer received Element: A1
Consumer is waiting to take element...
Consumer received Element: A2
producer transfered element: A2

以上是“java中TransferQueue的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

普兰县| 哈巴河县| 类乌齐县| 塘沽区| 金坛市| 肥西县| 额济纳旗| 弥勒县| 林周县| 海口市| 黑山县| 盈江县| 宿州市| 博罗县| 保亭| 林西县| 保康县| 改则县| 东城区| 宝应县| 济源市| 扶风县| 赤峰市| 宣化县| 上林县| 云南省| 甘孜县| 澄迈县| 攀枝花市| 巴塘县| 永修县| 诸暨市| 呼和浩特市| 张掖市| 长顺县| 绥化市| 康乐县| 商丘市| 渭南市| 招远市| 玉溪市|