2014-07-07 42 views
0

我想執行使用Java併發包的週期性動作,我用下面的代碼:ScheduledExecutorService的scheduleWithFixedDelay可贖回

ScheduledExecutorService daemon = Executors.newScheduledThreadPool(1); 
daemon.scheduleWithFixedDelay(new AddressThread(ParentMap.getSingletonInstance(), dictionary, test),10, 10, TimeUnit.SECONDS); 

其中AddressThread是傳遞一個Runnable類型。該代碼每10秒執行一次run(),並按照我的預期工作。但是,我需要返回一個值,並且run()不會讓我這樣做。有沒有像scheduleWithFixedDelay類似的方法,我可以通過Callable界面而不是Runnable並返回一些東西回來?如果不是,如果我想返回一個值,我該如何做與上面類似的東西?

+0

scheduleWithFixedDelay只接受Runnable作爲參數,而不是Callable。 因此,ScheduledFuture的返回類型爲null。只有方法計劃接受Runnable和Callable。對於你的情況,我想這是有道理的使用它。最後但並非最不重要的一點,因爲您在池中使用單個線程,爲什麼不使用.newSingleThreadScheduledExecutor()而不是newScheduledThreadPool(1)? –

回答

0

問題是你想在哪裏處理結果。如果您的任務被執行一次,您將從返回的ScheduledFuture(請參見:here

中得到任務的結果當您有幾個呼叫時,無人能夠區分何時返回值可用。

您可以實現一個Listener,並在任務結束時調用它,我們有一個單獨的線程,等待結果可用,處理它並安排下一次執行。