只用当前时间每秒执行一次代码?

Tin*_*ate 0 java algorithm

如何仅使用当前时间每秒执行代码?(没有额外的变量,它没有完全每一秒,我很满意800到1200毫秒之间的变化)

我试过了:

//code repeated every 30-100ms
if ((System.currentTimeMillis() % 1000) == 0) { //execute code
Run Code Online (Sandbox Code Playgroud)

但这不起作用,导致currentTimeMillis可以精确除以1000的可能性不是很高.

关于这个问题有什么好主意吗?

[编辑]请注意我的"无额外变量"评论.让我解释一下:我需要把这段代码放在一个我只有一个长值的地方,表示自1970年以来的unix时间(currentTimeMillis的值).我记不起任何东西,也无法保存下次执行代码时可以访问的额外变量.这是一个特例.

Ada*_*ker 5

最好的方法是使用 ScheduledExecutorService

ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
Future future = service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)

当您不再需要它时,您可以取消执行

future.cancel(true);
Run Code Online (Sandbox Code Playgroud)

  • @TinusTate你需要一个解决方案,或者你只是想让我们感到困惑?如果是第二,那么我不确定stackoverflow是否适合这样做. (2认同)