在 Java 中运行代码 x 秒?
2022-09-01 06:30:24
我想写一个java while循环,它将迭代15秒。我想这样做的一种方法是存储当前系统时间+ 15秒,然后将其与while循环签名中的当前时间进行比较。
有没有更好的方法?
我想写一个java while循环,它将迭代15秒。我想这样做的一种方法是存储当前系统时间+ 15秒,然后将其与while循环签名中的当前时间进行比较。
有没有更好的方法?
这个设计取决于你想在15秒内做什么。两种最合理的情况是“每X做一次15秒”或“等待X发生或15秒,以较早者为准”,这将导致非常不同的代码。
这不会迭代,但是如果你想在15秒内什么都不做,效率要高得多(它浪费更少的CPU来无所事事)。
如果你真的想循环15秒,那么你的解决方案就可以了,只要你的代码不会花太长时间。像这样:
long t= System.currentTimeMillis();
long end = t+15000;
while(System.currentTimeMillis() < end) {
// do something
// pause to avoid churning
Thread.sleep( xxx );
}
如果您希望代码在15秒后中断,无论它正在做什么,您都需要一个多线程解决方案。查看 java.util.concurrent 以获取大量有用的对象。大多数锁定的方法(如 wait() )都有一个超时参数。信号量可能完全符合您的需要。
正如其他海报已经提到的,如果您只想让线程暂停一段时间,请使用 。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();