使用Thread.sleep的java中的时间表

时间:2016-09-30 09:14:20

标签: java multithreading 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();
    }
  }

我读了一篇关于线程调度的教程。我想了解代码运行正常并在4秒后执行线程,但如果for循环假设时间为1秒,那么总时间将为1+ 4 5秒。 我不想执行服务。正常线程类。任何人都可以解释这个程序是如何工作的。

1 个答案:

答案 0 :(得分:0)

你是对的,sleep除了已经在循环中花费的时间之外。

即使你计算了剩余的睡眠时间,它仍然可能需要更长的时间,因为无法保证睡眠会有多快醒来。有时可能会持续数十毫秒。

ExecutorService所做的是计算何时从第一次运行中唤醒并确保任何延迟不会累积。它使用System.nanoTime(),因此挂钟中的修正不会影响周期。