import java.util.Date;
import javax.xml.crypto.Data;
public class Task1 {
public static void main(String[] args) {
// run in a second
final long timeInterval = 4000;
Data now = null;
Runnable runnable = new Runnable() {
public void run() {
while (true) {
// ------- code for task to run
System.out.println("Hello !!"+new Date());
for(int i=0;i<10000;i++){
System.out.println("Hello !!");
}
// ------- ends here
try {
Thread.sleep(timeInterval);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}
我读了一篇关于线程调度的教程。我想了解代码运行正常并在4秒后执行线程,但如果for循环假设时间为1秒,那么总时间将为1+ 4 5秒。 我不想执行服务。正常线程类。任何人都可以解释这个程序是如何工作的。
答案 0 :(得分:0)
你是对的,sleep
除了已经在循环中花费的时间之外。
即使你计算了剩余的睡眠时间,它仍然可能需要更长的时间,因为无法保证睡眠会有多快醒来。有时可能会持续数十毫秒。
ExecutorService所做的是计算何时从第一次运行中唤醒并确保任何延迟不会累积。它使用System.nanoTime(),因此挂钟中的修正不会影响周期。