实现方式
newFixedThreadPool
当线程数达到了核心线程数之后,即使没有可以执行的任务,线程池也不会释放线程 。并且这个线程池采用了一个无界的队列,也就是说阻塞队列永远不会达到饱和 。
public static ExecutorService newFixedThreadPool(int nThreads) {return new ThreadPoolExecutor(nThreads, nThreads,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue());
newSingleThreadExecutor
初始化线程池中只有一个线程执行任务,如果这个线程因为异常而结束工作,则会重新创建一个新的线程来继续执行该任务,这个唯一线程的执行操作就可以保证所有的提交任务都是按照队列排序顺序执行 。
public static ExecutorService newSingleThreadExecutor() {return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue()));
newCachedThreadPool
这线程池的线程数可以达到Integer.MAX_VALUE值,并且内部使用了SynchronousQueue队列来作为阻塞队列 。
public static ExecutorService newCachedThreadPool() {return new ThreadPoolExecutor(0, Integer.MAX_VALUE,60L, TimeUnit.SECONDS,new SynchronousQueue());
总结
上面我们介绍了在Java中如何去创建一个线程池,并且介绍了创建线程池相关的核心参数 。在后续的分享中还会给大家详细介绍关于Java中线程池的使用,敬请期待
推荐阅读
- Golang中如何判断两个Slice是否相等?
- Java 注解基础知识,掌握的人不足10%
- |多地中小学教师与编制脱钩,副作用逐渐显现,师范生该何去何从
- Java文件的读写操作方法
- APP开发用什么语言好?Java和PHP的区别在哪?
- SpringBoot中如何实现限流,这种方式才叫优雅!
- 值得考虑的七个出色的JavaScript项目
- 掌握Fork/Join 框架,证明你Java毕业了
- 深入了解 JavaScript 内存泄漏
- JavaScript中根据字符串中的范围规则,判断当前值是否符合条件