我有这个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)
}

10-06 13:50