2014-10-27 30 views
0

我有一個file upload功能,其中用戶可以在同一時間上傳多發的文件,爲良好的結果,我用Thread processing這樣Java的有效執行線程

Thread.start{ 
    // do file processing 'cause it is a long running process 
} 

現在的問題是,每個文件上傳system將創建一個new Thread,這將導致系統抖動和其他問題,所以現在我正在尋找一個解決方案,我可以創建一個Queue來存儲所有接收到的文件,並創建Thread的最小編號(say 5 nos)並對其進行處理並再次創建一組Thread和進程。

所以對於我期待到GParsJava Thread and Queue很快,但不知道這是有效的方法,什麼是業已存在的良好解決方案

+2

你已開始重新實現'ExecutorService'。也許現在可以切換到一個準備就緒的實施? – 2014-10-27 12:01:51

+0

只需創建一個BlockingQueue類型的對象和5個有權訪問該隊列的對象,並在循環中調用queue.take()。沒問題。你試過什麼了? – 2014-10-27 13:23:28

回答

2

你正在尋找一個線程池或者 - 在Java術語 - 一個Executor

Executor executor = anExecutor(); 
executor.execute(aRunnable()); 

的方法anExecutor應該返回一個新的Executor實例:

Executor anExecutor() { 
    return Executors.newFixedThreadPool(42); // just an example ... 
} 
+0

根據'executor'文檔「通常使用Executor而不是顯式創建線程」。但我的問題是創建一個存儲所有請求文件的隊列,並將其提供給'thread'進程。 – 2014-10-27 13:00:58

+0

@Suganthan爲什麼不簡單地將所有任務添加到執行器?它內部處理所有這些任務,如隊列。如果您需要對執行程序進行更多控制,請改爲使用['ExecutorService'](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html)。 Executors中的工廠方法返回這樣的ExecutorService。 – Seelenvirtuose 2014-10-27 13:28:45

+0

可能是我在'Java Thread'中的知識還不夠,但是我沒有明確的想法,我正在制定一些java示例來獲得清晰的想法,請允許我嘗試 – 2014-10-27 13:36:52