java线程池(一) 简述线程池的几种使用方式
来源:互联网 发布:美工初学者视频教程 编辑:程序博客网 时间:2024/05/24 05:03
首先说明下java线程是如何实现线程重用的
1. 线程执行完一个Runnable的run()方法后,不会被杀死 2. 当线程被重用时,这个线程会进入新Runnable对象的run()方法
java线程池由Executors提供的几种静态方法创建线程池。下面通过代码片段简单介绍下线程池的几种实现方式。后续会针对每个实现方式做详细的说明
newFixedThreadPool
创建一个固定大小的线程池
添加的任务达到线程池的容量之后开始加入任务队列开始线程重用总共开启线程个数跟指定容量相同。
@Test public void newFixedThreadPool() throws Exception { ExecutorService executorService = Executors.newFixedThreadPool(1); executorService = Executors.newFixedThreadPool(1, new ThreadFactoryBuilder().build()); RunThread run1 = new RunThread("run 1"); executorService.execute(run1); executorService.shutdown(); }
newSingleThreadExecutor
仅支持单线程顺序处理任务
@Test public void newSingleThreadExecutor() throws Exception { ExecutorService executorService = Executors.newSingleThreadExecutor(); executorService = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().build()); executorService.execute(new RunThread("run 1")); executorService.execute(new RunThread("run 2")); executorService.shutdown(); }
newCachedThreadPool
这种情况跟第一种的方式类似,不同的是这种情况线程池容量上线是Integer.MAX_VALUE 并且线程池开启缓存60s
@Test public void newCachedThreadPool() throws Exception { ExecutorService executorService = Executors.newCachedThreadPool(); executorService = Executors.newCachedThreadPool(new ThreadFactoryBuilder().build()); executorService.execute(new RunThread("run 1")); executorService.execute(new RunThread("run 2")); executorService.shutdown(); }
newWorkStealingPool
支持给定的并行级别,并且可以使用多个队列来减少争用。
@Test public void newWorkStealingPool() throws Exception { ExecutorService executorService = Executors.newWorkStealingPool(); executorService = Executors.newWorkStealingPool(1); RunThread run1 = new RunThread("run 1"); executorService.execute(run1); executorService.shutdown(); }
newScheduledThreadPool
看到的现象和第一种相同,也是在线程池满之前是新建线程,然后开始进入任务队列,进行线程重用
支持定时周期执行任务(还没有看完)
@Test public void newScheduledThreadPool() throws Exception { ExecutorService executorService = Executors.newScheduledThreadPool(1); executorService = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder().build()); executorService.execute(new RunThread("run 1")); executorService.execute(new RunThread("run 2")); executorService.shutdown(); }
阅读全文
0 0
- java线程池(一) 简述线程池的几种使用方式
- java线程池简述
- java中线程池的几种实现方式
- java中线程池的几种实现方式
- Java线程池的几种实现方式
- java中线程池的几种实现方式
- 简述Java线程池以及使用
- 创建线程池的几种方式
- 线程池的几种创建方式
- java线程同步的几种方式
- Java线程同步的几种方式
- java停止线程的几种方式
- Java-线程创建的几种方式
- java线程实现的几种方式
- java线程的几种方式
- java线程池的使用方式
- 干货:Java几种线程池的分析和使用。
- 几种线程池的使用详解
- 未来五年最具前景的一门编程语言是什么?
- alter table t_apsg_items alter column remark varchar(2000)
- c++编程题3——翻转字符串
- sleep和wait有什么区别
- ie8兼容性问题(八) jquery——ajaxSubmit
- java线程池(一) 简述线程池的几种使用方式
- Unity 让手机屏幕常亮
- Spring JDBC-数据连接泄露解读
- chrome跨域简单配置
- jQuery
- 数据结构——二叉树(递归与非递归遍历)
- 粤语学习
- 关于 Java 9 你所需要知道的一切
- 记事本