我想编写一个将迭代 15 秒的 java while 循环。我想这样做的一种方法是存储当前系统时间 + 15 秒,然后将其与 while 循环签名中的当前时间进行比较。
有没有更好的办法?
原文由 Danny King 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想编写一个将迭代 15 秒的 java while 循环。我想这样做的一种方法是存储当前系统时间 + 15 秒,然后将其与 while 循环签名中的当前时间进行比较。
有没有更好的办法?
原文由 Danny King 发布,翻译遵循 CC BY-SA 4.0 许可协议
正如其他海报已经提到的,如果您只想让线程暂停一段时间,请使用 Thread.sleep()
。
如果你想让线程做某事,但又想让它在一段时间后停止,可以使用类似的东西:
class Foo implements Runnable {
private volatile boolean killed = false;
public void run() {
while (!killed) {
try { doOnce(); } catch (InterruptedException ex) { killed = true; }
}
}
public void kill() { killed = true; }
private void doOnce() throws InterruptedException { /* .. */ }
}
从主线程执行:
Foo foo = new Foo();
Thread thread = new Thread(foo);
thread.start();
/* when you want to stop it */
foo.kill();
thread.interrupt();
原文由 Binil Thomas 发布,翻译遵循 CC BY-SA 2.5 许可协议
8 回答6.4k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
这个的设计取决于你想在 15 秒内做什么。两种最合理的情况是“每隔 X 执行此操作 15 秒”或“等待 X 发生或 15 秒以先到者为准”,这将导致截然不同的代码。
只是等待
线程.睡眠(15000)
这不会迭代,但是如果您想在 15 秒内什么都不做,效率会高得多(它在什么都不做时浪费的 CPU 更少)。
重复一些代码 15 秒
如果您真的想循环 15 秒,那么您的解决方案就可以了,只要您的代码不会花费太长时间。就像是:
等待 15 秒或其他条件
如果您希望您的代码在刚好 15 秒后被中断,无论它在做什么,您都需要一个多线程解决方案。查看 java.util.concurrent 以获得许多有用的对象。大多数锁定方法(如 wait() )都有超时参数。 信号量 可能正是您所需要的。