2017-08-17 52 views
0

我正在使用多線程ExecutorService接口來並行執行任務。但是這裏有一個共享資源,我需要在同步塊中進行設置,以便一次只有一個線程可以訪問它。正如我在同步模塊中完成的那樣,這項工作大約需要3個多小時才能完成。由於同步塊,我沒有看到使用多線程的任何一點。可以任何一個建議是沒有任何替代方案或實施下面的例子來平行運行速度環路,請最好的方法:多線程的替代建議

ExecutorService executor = Executors.newFixedThreadPool(100); 
for(String str : arrayList){ 
    for(String str1 : arrayList1){ 
    for(String str2 : arrayList2){ 
     executor.execute(new Runnable() { 
         @Override 
         public void run() { 
          //do Something 
          synchornize block{} 
         } 
     }); 
    } 
    } 
} 

任何建議嗎?

+0

我不知道誰給這個問題一個否定,但請你能讓我知道原因嗎?這樣我不會在這裏重複嗎? – user3750720

+0

不是我,但我認爲答案全部取決於執行程序塊內的代碼。出於好奇,單線程需要多長時間? –

+0

所以基本上我們會在嵌套for循環內進行API調用。所以你的意思是問我是否用一個線程而不是100個線程來運行它?它需要永遠我相信我從來沒有測試過..但如果它的100線程花費約3小時。實際上它可能需要3小時,即使單線程,因爲有一個同步塊大部分。 @SteveSmith – user3750720

回答

0

您應該嘗試重新設計您的代碼,以避免完全或最小化同步塊。例如,您可以將API調用的結果放在同步隊列中,讓另一個線程處理它們。