我知道这对于更有经验的程序员来说可能是完全显而易见的,但是我找不到任何东西。
无论线程必须执行多长时间,我都需要创建一个以每秒固定次数“滴答”的线程。花费比每个刻度更长的任务显然是不可能的,并且会减慢每秒的刻度数。
谢谢。
最佳答案
这是一个Thread
版本。 Timer
是最好的选择,但是如果您真的想使用自己的线程。
new Thread(new Runnable() {
@Override
public void run() {
try {
long before, sleepDuration, operationTime;
for(int i=0;i<100;i++) {
before = System.currentTimeMillis();
// do your operations
operationTime = (long)(1500*Math.random());
System.out.print("Doing operations for "+operationTime+"ms\t");
Thread.sleep(operationTime);
// sleep for up to 1000ms
sleepDuration = Math.min(1000, Math.max(1000 - (System.currentTimeMillis() - before), 0));
Thread.sleep(sleepDuration);
System.out.println("wait\t"+sleepDuration+"ms =\telapsed " + (operationTime+sleepDuration) + (operationTime > 1000 ? "<" : ""));
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();