[英]In Java, is it possible to execute a method for a period of time and stop after it reaches the time limit?
[英]java : execute a method over a maximum period of time
我正在使用JavaMail API
,在Folder類中有一個名為“search”的方法,有時執行時間太長。 我想要的是在最長的時間段內執行此方法(例如最多15秒),這樣我確信此方法不會超過15秒。
偽代碼
messages = maximumMethod(Folder.search(),15);
我是否必須創建一個線程來執行此方法,並在主線程中使用wait方法?
執行此操作的最佳方法是創建一個單線程執行程序 ,您可以使用它來提交callables。 返回值是Future<?>
,您可以從中獲取結果。 你也可以說等這么久才能得到結果。 這是示例代碼:
ExecutorService service = Executors.newSingleThreadExecutor();
Future<Message[]> future = service.submit(new Callable<Message[]>() {
@Override
public Message[] call() throws Exception {
return Folder.search(/*...*/);
}
});
try {
Message[] messages = future.get(15, TimeUnit.SECONDS);
}
catch(TimeoutException e) {
// timeout
}
你可以
此外,如果您有權訪問用於搜索文件夾的套接字,您可以設置其超時但我擔心它將被javamail完全封裝。
此致,Stéphane
這個SO問題顯示了如何向客戶端代碼發送超時異常: 如何在Java中使用超時調用某些阻塞方法?
您可以使用Thread.interrupt()
中斷實際搜索,但這取決於方法的實現。 您可能最終只完成操作以丟棄結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.