【发布时间】:2022-02-04 12:40:05
【问题描述】:
我有一个单例类,它在创建实例时创建一个线程。仅创建此类的一个对象,并且线程计划每 12 小时运行一次并打印给定的语句。在某些情况下,在前 12 小时之后,每 4-5 秒调用一次线程。我对为什么会发生这种情况感到困惑,因为我已将调度程序配置为每 12 小时运行一次,而不是每 4-5 秒运行一次。是否有我遗漏的配置或调度程序配置错误?
单例类,
import java.time.Instant;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
public class ThreadSchedulerTest {
private static final ThreadSchedulerTest test = new ThreadSchedulerTest();
private ThreadSchedulerTest (){createThread();}
private void createThread() {
Runnable renewer = () -> {
System.out.println("Running ok , time is : "+ Instant.now());
};
Executors.newSingleThreadScheduledExecutor(new
ThreadSchedulerThreadFactory("thread1")).scheduleAtFixedRate(
renewer, 0, 12, TimeUnit.HOURS);
}
static class ThreadSchedulerThreadFactory implements ThreadFactory {
private final String name;
public ThreadSchedulerThreadFactory(final String name) {
this.name = name;
}
@Override
public Thread newThread(Runnable r) {
Thread thread = new Thread(r, name);
thread.setDaemon(true);
return thread;
}
}
}
有人可以帮忙澄清这个问题吗?
【问题讨论】:
标签: java multithreading