【发布时间】:2020-09-26 12:37:58
【问题描述】:
所以当特定的事情发生时,我设法结束了我的线程,
但我想保护自己,以防我提到的具体事情没有发生, 所以我不会在我的线程内陷入无限循环。
所以我所做的是使用 5 分钟的计时器,以防万一,即使不满足“while”条件,该线程也会以某种方式死亡。 我是这样做的:
shouldRun = true;
doSomething();
Thread myThread = new Thread(() -> {
long start = System.currentTimeMillis();
long end = start + 60*1000*5;
try {
while (shouldRun && System.currentTimeMillis() < end) {
if (!someCondition()) {
doAnotherThing();
}
}
} catch(Exception e) {
logger.error("Thread has failed while running with an exception error: {} ", e);
}
}).start();
doTaskThatTakesOneMinuteToRun();
shouldRun = false;
上面的这个逻辑有效,但我想知道是否有更优雅/专业/正确的方法来实现我正在做的事情并通过计时结束线程,如果“while”条件是 “shouldRun”永远不会是假的,因为之前的方法被卡住了。
【问题讨论】:
标签: java multithreading synchronization thread-safety timing