How to exit a while loop after a certain time?
我有一个while循环,我希望它在经过一段时间后退出。
例如:
1 2 3 | while(condition and 10 sec has not passed){ } |
1 2 3 4 5 |
因此声明
1 |
检查自循环开始以来是否为10秒或10,000毫秒。
编辑
正如@Julien所指出的,如果你在while循环中的代码块需要花费很多时间,这可能会失败。因此使用ExecutorService将是一个不错的选择。
首先,我们必须实现Runnable
1 2 3 4 5 6 |
然后我们可以像这样使用ExecutorService,
1 2 3 | ExecutorService executor = Executors.newSingleThreadExecutor(); executor.invokeAll(Arrays.asList(new MyTask()), 10, TimeUnit.SECONDS); // Timeout of 10 seconds. executor.shutdown(); |
建议和接受的解决方案不会成功。
它不会在10秒后停止循环。想象一下,循环中的代码需要20秒才能处理,并在9.9秒时调用。您的代码将在执行29.9秒后退出。
如果你想在10秒后完全停止,你必须在一个外部线程中执行你的代码,你将在一定的超时后杀死它。
已经在这里和那里提出了现有的解决方案
就像是:
1 2 3 4 5 6 7 |
应该做的伎俩。如果您还需要其他条件,则只需将它们添加到while语句中即可。
不要使用它
1 |
它可能导致挂机主机时间变化。
更好地使用这种方式:
1 2 3 4 5 6 7 8 | Integer i = 0; try { while (condition && i++ < 100) { Thread.sleep(100); } } catch (InterruptedException e) { e.printStackTrace(); } |
(100 * 100 = 10秒超时)