从Java Util concurrent中选择哪个池
我有一大堆任务:从Java Util concurrent中选择哪个池,java,multithreading,threadpool,Java,Multithreading,Threadpool,我有一大堆任务: public class ProcessDay implements Runnable{ @Override public void run(){ List<ProcessHour> hr = //required hours //do some post actions } } public class ProcessHour implements Runnable{ @Override p
public class ProcessDay implements Runnable{
@Override
public void run(){
List<ProcessHour> hr = //required hours
//do some post actions
}
}
public class ProcessHour implements Runnable{
@Override
public void run(){
List<ProcessMinutes> mins = //required minutes
//do some post actions
}
}
公共类ProcessDay实现可运行{
@凌驾
公开募捐{
列表hr=//所需小时数
//做一些后期动作
}
}
公共类ProcessHour实现可运行{
@凌驾
公开募捐{
List mins=//所需分钟数
//做一些后期动作
}
}
ProcessSeconds
,ProcessMonth
。。。等
等等在这里使用ForkJoinPool
会很方便,但从性能的角度来看并不好,因为ProcessXXX
任务被提交到一个计算机集群,因此方法调用本身非常短
因此,为了提高性能,最好使用Executors.cachedThreadPoolExecutor
。但是有没有一种方法可以将ForkJoinPool与chachedThreadPool语义结合起来呢。我的意思是按需创建线程,如果不使用,就发布它们
也许有更好的方法?你能建议点什么吗
我的意思是按需创建线程,如果不使用,就发布它们
这就是缓存线程池的操作方式。它从0个线程开始,并在每次有新任务要处理且池中的所有线程都很忙时创建一个新线程。如果线程空闲60秒,则终止该线程。
默认缓存线程池是使用以下ThreadPoolExecutor
构造函数创建的:
return new ThreadPoolExecutor(0,
Integer.MAX_VALUE,
60L,
TimeUnit.SECONDS,
new SynchronousQueue<Runnable>())
返回新的ThreadPoolExecutor(0,
Integer.MAX_值,
60L,
时间单位:秒,
新建SynchronousQueue())
它创建时池中有0个可能的空闲线程,线程的最大数量不受限制,空闲线程终止前有60秒超时,队列实现不存储任务,只在池及其线程之间传输任务。这样的池适用于许多可能是您的情况的短期任务。正如您所看到的,使用directThreadPoolExecutor
constructor根据需要调整it配置也非常容易