2017-02-17 56 views
0

HI下面的代碼是在應用線程池的問題

threadPool.shutdown(); 
     while (!threadPool.awaitTermination(10, TimeUnit.SECONDS)) { 
      logger.info("Waiting for " 
        + (threadPool.getQueue().size() + threadPool 
          .getActiveCount()) + " jobs to complete."); 
     } 

當應用程序正在運行,在循環

  • 等待134個作業完成strucked使用。
  • 等待134個工作完成。
  • 等待134個工作完成。

上述聲明快到時間可持續,實際線程在database.will增加的時間超過10秒將在本situation.any建議幫助執行更新操作是很有幫助的

回答

0

ThreadPoolExecutor.shutdown()文檔說:

啓動有序關閉,其中先前提交的任務執行爲 ,但不會接受任何新任務。如果已關閉,則調用沒有 附加效果。

這意味着您的工作線程負責關閉自己。您尚未爲您的工作人員提供代碼,但我假設他們正在執行不會退出的阻止操作。解決這個問題的常用方法是讓工作人員定期檢查在shutdown呼叫之前設置的某種共享變量。他們被有效地告訴停止他們正在工作的任何東西。一個AtomicBoolean應該做的伎倆。

+0

實際上工作人員正在執行一些業務操作。因爲少數方法同步關鍵字被添加。同步關鍵字會導致以上情況嗎? – siva