2014-05-01 76 views
0

我們的系統處理從消息傳遞系統傳遞的消息。如果10秒後沒有收到任何消息,則應引發錯誤(不活動超時)。我想使用ScheduledExecutorService(1線程)。每次收到消息的時候,我取消了以前的超時任務,並提交一個新問題:使用ScheduledExecutorService實現不活動超時

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
Callable timeoutTask = new Callable() {...}; 

... 

synchronized { 
    timeout.cancel(); 
    timeout = executor.schedule(timeoutTask, 10, TimeUnit.SECONDS); 
} 

在正常情況下,我們處理〜1000 /秒。這種方法會擴大嗎?

回答

0

如果共享線程池並將timeoutTask的運行時間保持得較低,那麼這可能是很好的。如果你每個〜1000 /秒的任務有一個線程池,那麼這是行不通的。

如果您仍然擔心,可以查看Netty項目(link)的HashedWheelTimer。這在調度超時時非常有效。請注意,您也必須共享HashedWheelTimer的實例。