码迷,mamicode.com
首页 > 编程语言 > 详细

5.Java线程池的创建和使用

时间:2018-08-08 23:40:07      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:log   关于   保留   执行器   adp   空闲   查看   led   需要   

线程池

构建一个新的线程是有一定代价的,因为涉及到与操作系统的交互。如果程序中需要使用大量生命周期很短的线程,就应该使用线程池。

Runnable对象交给线程池来执行,就会有一个线程调用run方法,当run方法退出的时候,线程不会死亡,而是在池中准备为下一个请求提供服务。

另一个使用线程池的理由是为了减少并发编程的数目,创建大量线程会大大降低性能,甚至使虚拟机崩溃,而使用线程池能限制并发编程的总数。

线程池的创建和使用

而创建线程池对象需要使用执行器(Executors),注意要加s,Executor是个接口,而Executors才能创建线程池对象。

//创建一个不限数量的线程池,当执行一个任务的时候,如果有空闲线程用,会给它分配,如果没有空闲线程,就会创建一个新线程,空闲线程会被保留60秒
ExecutorService executor = Executors.newCachedThreadPool();

//创建一个具有固定数量的线程池,空闲线程也会被一直保留
ExecutorService executor2 = Executors.newFixedThreadPool(5);

//创建一个具有一个线程的线程池,由一个线程一个接一个的执行任务(感觉有点鸡肋)
ExecutorService executor3 = Executors.newSingleThreadExecutor();

//创建一个预定执行而构建的固定数量的线程池
ExecutorService executor4 = Executors.newScheduledThreadPool(5);

//创建一个用于预定执行而构建的只有一个线程的线程池
ExecutorService executor5 = Executors.newSingleThreadScheduledExecutor();

最常用的就是前三个,返回的都是ExecutorService对象,ExecutorService也是一个接口。

如果想要查看当前线程池中的线程数,不能使用ExecutorService接口对象获取,需要把它强转为它的子类,也就是ThreadPoolExecutor类对象,关于如何使用,在上一篇Callable与Future中有举例,地址:
https://www.cnblogs.com/Fill/p/9445908.html

5.Java线程池的创建和使用

标签:log   关于   保留   执行器   adp   空闲   查看   led   需要   

原文地址:https://www.cnblogs.com/Fill/p/9446381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!