第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用隊(duì)列的生產(chǎn)者/使用者線程

使用隊(duì)列的生產(chǎn)者/使用者線程

犯罪嫌疑人X 2019-07-22 18:55:28
使用隊(duì)列的生產(chǎn)者/使用者線程我想創(chuàng)造一些Producer/Consumer線程應(yīng)用程序。但我不知道在兩者之間實(shí)現(xiàn)隊(duì)列的最佳方式是什么。所以我有兩個(gè)想法(這兩個(gè)想法都可能是完全錯(cuò)誤的)。我想知道哪一個(gè)更好,如果兩者都很糟糕,那么實(shí)現(xiàn)隊(duì)列的最佳方法是什么。我關(guān)心的主要是這些例子中隊(duì)列的實(shí)現(xiàn)。我正在擴(kuò)展一個(gè)隊(duì)列類,它是一個(gè)內(nèi)部類,并且是線程安全的。下面是兩個(gè)例子,每個(gè)例子有4個(gè)類。主修班-public class SomeApp{     private Consumer consumer;     private Producer producer;     public static void main (String args[])     {         consumer = new Consumer();         producer = new Producer();     }}消費(fèi)者階層-public class Consumer implements Runnable{     public Consumer()     {         Thread consumer = new Thread(this);         consumer.start();     }     public void run()     {         while(true)         {             //get an object off the queue             Object object = QueueHandler.dequeue();             //do some stuff with the object         }     }}制片人班-public class Producer implements Runnable{     public Producer()     {         Thread producer = new Thread(this);         producer.start();     }     public void run()     {         while(true)         {             //add to the queue some sort of unique object             QueueHandler.enqueue(new Object());         }     }}排隊(duì)類-public class QueueHandler{     //This Queue class is a thread safe (written in house) class     public static Queue<Object> readQ = new Queue<Object>(100);     public static void enqueue(Object object)     {         //do some stuff         readQ.add(object);     }     public static Object dequeue()     {         //do some stuff         return readQ.get();     }}或主修班-public class SomeApp{     Queue<Object> readQ;     private Consumer consumer;     private Producer producer;     public static void main (String args[])     {         readQ = new Queue<Object>(100);         consumer = new Consumer(readQ);         producer = new Producer(readQ);     }}
查看完整描述

3 回答

?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊

Java 5+擁有您所需的所有此類工具。你會(huì)想:

  1. 把你所有的制片人放在一起

    ExecutorService;

  2. 把你所有的消費(fèi)者都放在另一個(gè)

    ExecutorService;

  3. 如果有必要,使用

    BlockingQueue.

我為(3)說(shuō)“如果有必要”,因?yàn)楦鶕?jù)我的經(jīng)驗(yàn),這是不必要的一步。您所做的就是向使用者執(zhí)行器服務(wù)提交新任務(wù)。因此:

final ExecutorService producers = Executors.newFixedThreadPool(100);final ExecutorService consumers = Executors.newFixedThreadPool(100);while (/* has more work */) {
  producers.submit(...);}producers.shutdown();producers.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);consumers.shutdown();consumers.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);

所以producers直接提交consumers.


查看完整回答
反對(duì) 回復(fù) 2019-07-22
?
浮云間

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊

你在重新發(fā)明方向盤(pán)。

如果需要持久化和其他企業(yè)特性,請(qǐng)使用JMS(我建議ActiveMq).

如果您需要內(nèi)存中的快速隊(duì)列,可以使用java的一種影響排隊(duì).

如果您需要支持Java1.4或更早版本,請(qǐng)使用DougLea的優(yōu)秀并發(fā)包裹。


查看完整回答
反對(duì) 回復(fù) 2019-07-22
  • 3 回答
  • 0 關(guān)注
  • 256 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)