《并发编程》--14.Java线程池和自定义线程
来源:互联网 发布:怎么用sql语句降序排列 编辑:程序博客网 时间:2024/06/06 00:41
为了避免频繁的创建和销毁线程,减少CPU的压力,线程池就应运而生。
newFixedThreadPool()方法:该方法返回一个只有一个线程的线程池,该线程池的数量是固定始终不变。当有新任务提交时,线程池中若有空闲线程,将会立即执行。若么有空闲线程,则会被暂存在任务队列中,待有空闲线程时,才能处理任务队列的任务。
newSingleThreadExecutor()方法:该方法返回一个只有一个线程的线程池。若多余一个任务提交到线程池,会被暂存在任务队列中,待这个空闲线程时,才能处理任务队列的任务。
newCachedThreadPool()方法:该方法返回一个可以根据实际情况调整线程数据的线程池,线程池的线程数量不固定,但若有空闲线程可以复用,会优先使用可以复用的线程。若所有线程都在工作,就会创建新的线程处理任务。所有线程在当前任务中处理完毕后,将返回线程池进行复用
newSingleThreadExecutor()方法,该方法创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
newScheduledThreadPool()方法:创建一个定长线程池,支持定时及周期性任务执行。
刨根问底
无论使用哪个线程池,返回的结果不一样。但是在jdk底层都是继承了ThreadPoolExecutor。下面给出3几个线程的实现方法。jdk源码可查
public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); }
public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); }
public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>())); }
总结:有时间jdk提供的线程池满足不了我们的需求,工程师也可以继承ThreadPoolExecutor来自定义线程池。
自定义线程注意以下几个参数即可。
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), defaultHandler); }
corePoolSize:指定线程池中线程的数量
maximumPoolSize:指定线程池中最大的线程数量
keepAliveTime:空闲线程的活跃时间,超过时间将会销毁
unit:keepAliveTime的单位
workQueue:任务队列,提交但还未执行的任务
ThreadFactory:线程工厂,用于创建线程。默认即可
defaultHandler:拒绝策略。当任务太多来不及处理时,如何拒绝任务(拒绝细节下节可讲)
阅读全文
0 0
- 《并发编程》--14.Java线程池和自定义线程
- java并发编程:线程池
- Java并发编程:线程池
- Java并发编程 线程池
- java并发编程---线程池
- Java并发编程:线程池
- Java并发编程:线程池
- 【Java并发编程】线程池
- java并发编程--线程池
- java并发编程之进程和线程
- Java并发编程:进程和线程
- java并发编程:创建线程和进程
- Java并发编程之线程池、Callable和Future使用
- Java并发编程:线程生命周期和线程调度
- java并发编程:线程安全-线程同步-synchronized和lock
- Java并发编程之四:守护线程和线程阻塞
- java并发编程-java线程池
- java并发编程(十七)----(线程池)java线程池架构和原理
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- Uva 10976
- php如何下载文件
- JDK源码解析集合篇--ArrayList全解析
- Linux复用I/O-epoll-server代码
- 《并发编程》--14.Java线程池和自定义线程
- 前端性能优化--yahoo 军规
- 洛谷p1005矩阵取数游戏
- 莫名的一个mysql耗时记录
- 运算符
- thinkPHP5-分页的实现
- 放大镜插件
- Odoo10 win7系统下部署
- IntelliJ IDEA 中 右键新建时,选项没有Java class的解决方法和具体解释