我有这个scala
代码,它工作得很好(run()
在类中被覆盖)
val processRunnable = new myProcessClassWithOverriddenRunFunction()
val processThread = new Thread(processRunnable)
processThread.start
我想做的是为
processThread
线程设置超时。我怎样才能做到这一点?我做了一些研究,找不到可以传递给
new Thread()
的任何参数或processThread
中的任何函数来实现这一点。在
stackoveflow
上找到了一些解决方案,这些解决方案实现了ExecutorService
,但不幸的是,在此特定问题上无法实现,因为每次仅调用一个ExecutorService
都使另一个新的processThread
显得效率低下。还有其他一些原因,但是我的问题是如何在此代码上实现该功能? 最佳答案
在Java中,您可以使用
CompletableFuture<Void> future = CompletableFuture.runAsync(processRunnable);
future.get(1000, TimeUnit.MILLISECONDS);
To
future.get
函数将在达到超时(在上面的示例中为1秒)时抛出TimeOutException
,并且可以在catch块中处理超时情况。完整的代码如下所示:
try {
CompletableFuture<Void> future = CompletableFuture.runAsync(processRunnable);
future.get(1000, TimeUnit.MILLISECONDS);
}
catch{
case texc : TimeoutException => println("Timeout is reached.")
case exc : Exception => println(exc.getmessage)
}