单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。ScheduledExecutorService
是 Java 提供的一个接口,用于执行定时任务或周期性任务。要创建一个 ScheduledExecutorService
的单例实例,并确保一次只执行一个任务,可以按照以下步骤进行:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class SingletonScheduledExecutor {
// 私有静态实例
private static SingletonScheduledExecutor instance;
private ScheduledExecutorService executorService;
// 私有构造函数
private SingletonScheduledExecutor() {
executorService = Executors.newSingleThreadScheduledExecutor();
}
// 公共静态方法获取实例
public static synchronized SingletonScheduledExecutor getInstance() {
if (instance == null) {
instance = new SingletonScheduledExecutor();
}
return instance;
}
// 提交任务的方法
public void scheduleTask(Runnable task, long initialDelay, long period, TimeUnit unit) {
executorService.scheduleAtFixedRate(task, initialDelay, period, unit);
}
// 关闭 executorService
public void shutdown() {
executorService.shutdown();
}
public static void main(String[] args) {
SingletonScheduledExecutor executor = SingletonScheduledExecutor.getInstance();
// 提交一个示例任务
executor.scheduleTask(() -> System.out.println("Task is running"), 0, 1, TimeUnit.SECONDS);
// 运行一段时间后关闭
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
executor.shutdown();
}
}
ScheduledExecutorService
实例,节省资源。synchronized
关键字或双重检查锁定(Double-Checked Locking)。newSingleThreadScheduledExecutor
确保任务按顺序执行。ScheduledExecutorService
可能导致资源泄漏。shutdown
方法关闭线程池。通过上述方法,可以有效地创建和管理 ScheduledExecutorService
的单例实例,并确保一次只执行一个任务。
领取专属 10元无门槛券
手把手带您无忧上云