如何在可变时间调度一组线程(任务)



我必须在一天中的不同时间异步启动10个任务,直到第二天的某个小时。离第二天的时间越近,我就越需要重复这10个任务。

我的问题是,我应该如何管理这个?我应该使用什么遗嘱执行人?管理内存的最佳方法是什么?

我想使用执行者。newScheduledThreadPool,它可以在可变时间启动具有10个任务的线程池进程。这个问题要求我启动一组新的任务,即使前一组任务还没有完成(所以每次都可能触发一个新的线程池)。

我也在考虑使用进程注册表来管理已经启动的不同进程。当一个进程不再使用时,注册表不能停止它。

每次任务完成时,我都想到刷新可运行程序,并停止线程池。总的来说,这是一个好的解决方案吗?

可能出现的问题是内存被线程池饱和。也许在线程池上设置一个时间限制?

我猜,你需要一个调度线程在普通的非调度池和另一个工人池,像这样:

    ExecutorService ex = Executors.newFixedThreadPool(1);
    final ExecutorService workersPool = Executors.newCachedThreadPool();
    ex.submit(new Runnable() {
        public void run() {
            try {
                do { 
                    // determine if it's time to start workers
                    if (timeToStartWorkers()) {
                        workersPool.submit(new Worker(...));
                        workersPool.submit(new Worker(...));
                        ...
                    }
                    // sleep till next time
                    Thread.sleep(timeTillNextCheck);
                }
            } catch (InterruptedException e) {
                // handle exception
            }
        }
    });

不需要重新创建线程池

最新更新