gpt4 book ai didi

java - 如何设置线程超时

转载 作者:行者123 更新时间:2023-11-29 08:25:57 24 4
gpt4 key购买 nike

我有这个 scala 代码,它工作得很好(run() 在类中被覆盖)

val processRunnable = new myProcessClassWithOverriddenRunFunction()
val processThread = new Thread(processRunnable)
processThread.start

我想做的是为 processThread 线程设置一个超时。我该怎么做?

我做了一些研究,但找不到我们可以传递给 new Thread()processThread 中的任何函数来实现该目的的任何参数。

stackoveflow 上找到了一些实现了 ExecutorService 的解决方案,但不幸的是,这在这个特定问题中是不可实现的,因为要为另一个新的 ExecutorService只有一个processThread,每次调用这个函数都显得效率低下。还有一些其他原因,但我的问题是如何在此代码上实现该功能?

最佳答案

如果没有线程协作,就无法实现这一点。这在本质上类似于如何制作线程 interruptible ,并且与一般情况下的事实有关unsafe停止异步运行线程(并且超时是异步的)。

您的线程需要将超时功能作为其实现的一部分,以便它可以在安全的情况下对超时条件采取行动。

例如:

public class MyProcessClass {
private final long timeoutMillis = 30000;
public void run() {
long timeout = System.currentTimeMillis() + timeoutMillis;
while (System.currentTimeMillis() < timeout) {
// Process next chunk of work
}
}
}

附言。不要被other answer误导了基于 ExecutorService - 它要求线程是可中断的,即与上面所示的解决方案相同。

        while (!Thread.interrupted()) {
// Process next chunk of work
}

关于java - 如何设置线程超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53154029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com