![](/img/trans.png)
[英]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.