在特定时间间隔后重复某些操作

时间:2015-04-29 07:25:59

标签: java multithreading time

我经历了一些关于在特定时间间隔之后做某事的问题(比如每五秒打印一次你好世界)。

我在java程序中看到了不同的方法。我的问题是java如何在内部执行此操作。

一旦我们运行java程序,main函数就开始在一个线程中执行。但是这个线程可以随时发送到Runnable状态(暂停执行)。所以如果我在main函数中声明了print语句,java现在如何跟踪时间。如果java程序在接下来的五秒钟内没有恢复怎么办?

这可行的一种方法是,如果我们的意思是"在java程序运行"的时间段内每5秒。这是JVM如何做到的?

假设我有一个处理器。

1 个答案:

答案 0 :(得分:0)

好的,让我们跟踪电话。如果我们使用ScheduledThreadPoolExecutor,我们会发现它在内部使用DelayedWorkQueue

super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,
          new DelayedWorkQueue());

等待下一个任务DelayedWorkQueue使用Condition available = lock.newCondition()

available.awaitNanos(delay);

好的,我们来看看awaitNanos中的AbstractQueuedSynchronizer实施:

LockSupport.parkNanos(this, nanosTimeout);

LockSUpport

unsafe.park(false, nanos);

这是本机方法,它使用操作系统的调度程序来延迟线程执行。