java 和 Thread.sleep 中的时间安排程序
Time schedular in java with Thread.sleep
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();
}
}
我阅读了有关 threads.I 调度的教程,想了解代码运行良好并在 4 秒后执行线程,但如果 for 循环所花费的时间假设为 1 秒,则总时间将是 1+4 5 秒。
我不想执行程序服务。只是普通线程 class.Can 谁能解释一下这个程序是如何工作的。
你是对的,sleep
是循环中已经花费的时间的补充。
即使您计算了剩余的睡眠时间,也可能需要更长的时间,因为无法保证睡眠会多快醒来。有时会晚几十毫秒。
ExecutorService 所做的是计算它应该从第一个 运行 唤醒的时间,并确保不会累积任何延迟。它使用 System.nanoTime() 因此挂钟的更正不会影响周期。
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();
}
}
我阅读了有关 threads.I 调度的教程,想了解代码运行良好并在 4 秒后执行线程,但如果 for 循环所花费的时间假设为 1 秒,则总时间将是 1+4 5 秒。 我不想执行程序服务。只是普通线程 class.Can 谁能解释一下这个程序是如何工作的。
你是对的,sleep
是循环中已经花费的时间的补充。
即使您计算了剩余的睡眠时间,也可能需要更长的时间,因为无法保证睡眠会多快醒来。有时会晚几十毫秒。
ExecutorService 所做的是计算它应该从第一个 运行 唤醒的时间,并确保不会累积任何延迟。它使用 System.nanoTime() 因此挂钟的更正不会影响周期。