ver*_*lav 7 java concurrency multithreading scheduled-tasks threadpool
我有许多任务,我想以不同的速率定期执行大多数任务.但是可以安排一些任务同时执行.此外,任务可能需要在另一个当前正在执行时开始执行.
我还想通过为它设置一个对象来自定义每个任务,任务将在执行时运行.
通常,任务将在2到30分钟的时间内执行,大约需要4-5秒,执行时有时需要30秒.
我发现Executors.newSingleThreadedScheduledExecutor(ThreadFactory)几乎正是我想要的,除非它可能会导致我的问题,如果一个新任务恰好被安排执行而另一个已经在执行.这是因为Executor由单个执行线程备份.
另一种方法是使用Executors.newScheduledThreadPool(corePoolSize, ThreadFactory),但这需要我在池中创建许多线程.我想避免在必要之前创建线程,例如,如果由于冲突的执行计划而导致需要并行执行两个或更多任务.
对于上面的情况,Executors.newCachedThreadPool(ThreadFactory)似乎做我想要的,但后来我无法安排我的任务.我认为,高速缓存和预定执行程序的组合最好,但我无法在Java中找到类似的东西.
你认为实施上述的最佳方法是什么?
不是ScheduledThreadPoolExecutor.ScheduledThreadPoolExecutor(int):
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(0);
Run Code Online (Sandbox Code Playgroud)
你需要什么?0是个corePoolSize:
corePoolSize- 保留在池中的线程数,即使它们处于空闲状态,除非allowCoreThreadTimeOut已设置