2013-01-08 57 views
3

我會形容我的問題:java的主線程管理已啓動其他線程

  • 我開發的異步模式的文檔生成應用程序(Office文檔),所以我使用的線程

  • 由於性能的限制,我必須在同一時間啓動僅2個線程,

  • 爲了不阻斷用戶啓動文檔生成而兩個線程正在運行,我想開發含有ArrayDeque對象作爲threa一個主線程d堆棧,在那裏用戶可以添加創建請求(作爲實施Collable或Runnable接口的對象),並且使用並行API來啓動線程上FIFO模式

    的問題是:

  • 如何能確保運行主線程作爲所有用戶的單身?

  • 我怎麼能說ArrayDeque在主線程運行

回答

9

聽起來像使用ExecutorService有兩個線程池的簡單情況:

class Task implements Runnable { 
    ... 
} 

ExecutorService exec = Executors.newFixedThreadPool(2); 
exec.submit(new Task()); // submit task to the queue for asynchronous processing 

ExecutorService將封裝池線程和工作隊列。線程會在完成前面的任務時自動選擇新的工作。

+0

感謝鐸,實際上ExecutorService的不會,除非前兩個添加的任務完成後不粉碎JVM – ahajri

+0

技術上會有3(用戶)線程這種方式,但主線程將結束,一旦工作提出了新的課題因爲所有任務都已提交。 – biziclop

+2

@Karbala任務被立即提交到隊列,但直到其中一個工作線程空閒時纔會被處理。 –