参考文章:
Java线程池的四种创建方式 - 绝不妥协绝不低头 - 博客园 (cnblogs.com)
JAVA线程池原理详解一 - 冬瓜蔡 - 博客园 (cnblogs.com)
1.定长线程池
newFixedThreadPool(2)
核心线程和线程总数一样
ExecutorService newFixedThreadPool=Executors.newFixedThreadPool(2);
for(int j=0;j<4;j++){
final int index=j;
newFixedThreadPool.execute(new MyRunnable(index));
}
2.定长线程池,支持周期性或者定时任务。
newScheduleThreadPool
核心线程是固定的,线程总数是Integer.Max
ScheduledExecutorService newScheduleThreadPool= Executors.newScheduledThreadPool(2);
for(int k=0;k<4;k++){
final int index=k;
//执行结果:延迟三秒之后执行,除了延迟执行之外和newFixedThreadPool基本相同,可以用来执行定时任务
newScheduleThreadPool.schedule(new MyRunnable(index),3, TimeUnit.SECONDS);
}
3.可缓存线程池
newCachedThreadPool
核心线程数为0,线程总数为Integer.Max
ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
for(int i=0;i<4;i++) {
final int index=i;
newCachedThreadPool.execute(new MyRunnable(index));
}
4.单线程池
newSingleThreadExecutor
核心线程数和线程总数都是1
ExecutorService newSingleThreadExtutor=Executors.newSingleThreadExecutor();
for(int l=0;l<4;l++){
final int index=l;
//执行结果:只存在一个线程,顺序执行
newSingleThreadExtutor.execute(new MyRunnable(index));
}
5.自定义线程池
LinkedBlockingQueue queue=new LinkedBlockingQueue();
ThreadPoolExecutor theadPool=new
ThreadPoolExecutor(2,4,10,TimeUnit.SECONDS,queue);
网友评论