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() 因此挂钟的更正不会影响周期。