在单个线程上连续监视 Java 中的函数

Continuous Monitoring of a function in Java on a single thread

我在特定的 class 中有一个方法,我需要后续执行以大致固定的时间间隔进行,间隔由指定的时间段隔开。我需要使用 ScheduledExecutorService 来执行此操作。

此外,即使从任何地方多次调用此方法,我也希望在不启动新线程的情况下执行同一个线程。

我怎样才能做到这一点?

  1. 创建 Runnable 的实现 class(使其成为单例)

    public class MainTask implements Runnable {
    
        private static MainTask mainTask;
    
        private MainTask(){ }
    
        public static MainTask getInstance(){
            if(mainTask==null){
                mainTask = new MainTask();
            }
            return mainTask;
        }
    
        @Override
        public void run() {
            // task to run goes here
            System.out.println("Hello !! " + Thread.currentThread().getName());
        }
    
    }
    
  2. 利用scheduleAtFixedRate的方法 ScheduledExecutorService 方法,以便按指定时间间隔定期执行任务。

    它的方法定义是

    ScheduledFuture scheduleAtFixedRate(可运行命令, 长初始延迟, 长时间, TimeUnit单位)

    在哪里 period = 连续执行之间的周期。 请注意,此值可能是 min/hrs/days 等,具体取决于配置的 TimeUnit。

  3. 由于您希望其他 class 使用此功能我建议您可以将线程创建和任务创建封装在另一个 class 中并允许Class.methodName for.e.g MyScheduler.execute() 使用它;

     public class MyScheduler {
    
        private static ScheduledExecutorService service;
    
        private static MainTask mainTask;
    
        static {
            service = Executors.newSingleThreadScheduledExecutor();
            mainTask = MainTask.getInstance();
        }
    
        public static void execute() {
            service.scheduleAtFixedRate(mainTask, 0, 4, TimeUnit.SECONDS);
    
        }
    }