JDK 线程池小结
程序员文章站
2024-01-29 19:23:16
...
1、工具类 Executors 提供几种生成线程池的方法,这些线程池都是统一封装的同一个类,具体如下:
public static ExecutorService newSingleThreadExecutor() { //单线程线程池
return new FinalizableDelegatedExecutorService
(new ThreadPoolExecutor(1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()));
}
public static ExecutorService newFixedThreadPool(int nThreads) { //固定线程数线程池
return new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()); //列表阻塞队列
}
public static ExecutorService newCachedThreadPool() { //缓存线程池
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>()); //无缓冲区队列 SynchronousQueue
}
/**
*ThreadPoolExecutor 构造方法,及其各参数说明
*
**/
public ThreadPoolExecutor(int corePoolSize, //核心线程数,线程池最小数量,无任务情况下也会存在
int maximumPoolSize, //线程池最大数量,当任务很多时,最多创建数目
long keepAliveTime, //线程的最大空闲时间
TimeUnit unit, //
BlockingQueue<Runnable> workQueue) { //阻塞队列
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
Executors.defaultThreadFactory(), defaultHandler); //defaultThreadFactory 创建线程的工场
}
实际运用是 ForkJoinPool ,
1、使用场景,游戏详情,客户下单,支付回调等多路并行
线程池注意点:
1、设置core大小
2、设置阻塞任务队列大小
3、选择拒绝策略
上一篇: C++ new、operator new和placement new的区别
下一篇: H5课上笔记篇