2014-10-11 63 views
0

加入計劃如果您有您通過scheduleAtFixedRate提交如本如何在固定利率線程

public void methodName() { 
    executorService.scheduleAtFixedRate(new Runnable() { 
     @Override 
     public void run() { 
      //do some operations 
      //getSomeResults() 
     } 

    }, x, y, TimeUnit.SECONDS); 
} 

是否有可能加入另一個線程負責getSomeResults()一個遺囑執行人服務?例如,我希望線程在繼續之前等待getSomeResults()完成 - 這可能嗎?

感謝

回答

0

是的,要提交一個FutureTask,而不是一個Runnable。 (A FutureTaskRunnable,所以你不需要改變任何東西。)

如果創建FutureTask那麼你可以有另一個線程調用它的.get()方法,該方法將阻塞,直到任務完成,它將返回結果。

(最簡潔的方式將是完全刪除您getSomeResults()方法,只是使用的FutureTaskget()方法,但沒有什麼可以阻止你離開你的代碼或多或少因爲它是,並且只使用get()作爲如果你想首先嚐試檢查它是否全部正常工作)

+0

所以你應該在當前運行方法中創建一個Future Task,如上所述,然後提交併調用get(),這將阻止「outer 「線程直到結果完成? – Biscuit128 2014-10-11 09:05:40

+0

不,用'FutureTask'替換'new Runnable(){...}'。完全擺脫'Runnable'。 – 2014-10-11 09:10:55