gpt4 book ai didi

java - 线程可能无法启动吗?

转载 作者:行者123 更新时间:2023-11-29 08:39:52 27 4
gpt4 key购买 nike

我想从不同的线程运行一些代码,并让它在设定的时间段后超时。我还希望能够定期运行一些其他代码(即刷新一些输出或其他东西)。

我基本上就是这样做的:

Thread operation = new Thread() { ... };
operation.start();

// Check if Thread is still alive every 100ms
for (int i = 0; i < timeout / 100; i++) {
somethingToDoWhileWaiting(...);
if (!operation.isAlive()) {
break; // Thread is dead so we can end early
}
Thread.sleep(100);
}

if (operation.isAlive()) {
operation.interrupt(); // timed out
}

我的问题是,有什么方法可以使线程无法启动(不抛出某种异常),或者在我想检查它是否处于 Activity 状态时它可能还没有启动?

如,是否有可能:

  1. 我调用了 operation.start() 并且没有抛出任何错误。

  2. 我进入循环并检查它是否还活着

  3. 不是(因为它还没有开始,或者出现了幕后错误)?

除此之外,是否有更好的方法来检查线程是否已结束(或者它是否已正确启动 - 我想循环直到它还活着,但我对此有同样的担心)?

最佳答案

这是使用 ExecutorService 和 Futures 的好地方:

Runnable task = new Runnable() { ... };
ExecutorService executor = Executors.newFixedThreadPool(1);
Future<Void> future = executor.submit(task);

// Check if Thread is still alive every 100ms
for (int i = 0; i < timeout / 100; i++) {
somethingToDoWhileWaiting(...);
if (!future.isDone()) {
break; // Thread is dead so we can end early
}
Thread.sleep(100);
}

if (!future.isDone()) {
future.cancel(true);
}

关于您的核心问题:线程受操作系统调度程序的支配。线程可能永远不会启动;然而,这是极不可能的,因为操作系统调度程序非常擅长它的工作。如果有相当长的一段时间没有线程工作,则您的代码很可能存在错误。

关于java - 线程可能无法启动吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41112273/

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