java多线程之Executors线程池
2015-11-26 10:24
513 查看
原文:http://www.javaranger.com/archives/1373
在jdk1.5以后,JDK已经为我们提供了线程池的实现,通过工具类java.util.concurrent.Executors可以轻松的创建线程池。
一、创建线程池
Executors类,提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService接口。
public static ExecutorService newFixedThreadPool(int nThreads)
创建固定数目线程的线程池。
public static ExecutorService newCachedThreadPool()
创建一个可缓存的线程池,调用execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。
public static ExecutorService newSingleThreadExecutor()
创建一个单线程化的Executor。
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
创建一个支持定时及周期性的执行任务的线程池,多数情况下可用来替代Timer类。可以分别通过scheduleWithFixedDelay和scheduleAtFixedRate方法来完成调度
scheduleAtFixedRate 这个方法是不管你有没有执行完,反正我每隔几秒来执行一次,以相同的频率来执行
scheduleWithFixedDelay 这个是等你方法执行完后,我再隔几秒来执行,也就是相对延迟后,以固定的频率去执行
二、ExecutorService生命周期
ExecutorService扩展了Executor并添加了一些生命周期管理的方法。一个Executor的生命周期有三种状态,运行 ,关闭 ,终止 。Executor创建时处于运行状态。当调用ExecutorService.shutdown()后,处于关闭状态,isShutdown()方法返回true。这时,不应该再向Executor中添加任务,所有已添加的任务执行完毕后,Executor处于终止状态,isTerminated()返回true。
如果Executor处于关闭状态,往Executor提交任务会抛出unchecked exception RejectedExecutionException。
在jdk1.5以后,JDK已经为我们提供了线程池的实现,通过工具类java.util.concurrent.Executors可以轻松的创建线程池。
一、创建线程池
Executors类,提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService接口。
public static ExecutorService newFixedThreadPool(int nThreads)
创建固定数目线程的线程池。
public static ExecutorService newCachedThreadPool()
创建一个可缓存的线程池,调用execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。
public static ExecutorService newSingleThreadExecutor()
创建一个单线程化的Executor。
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
创建一个支持定时及周期性的执行任务的线程池,多数情况下可用来替代Timer类。可以分别通过scheduleWithFixedDelay和scheduleAtFixedRate方法来完成调度
scheduleAtFixedRate 这个方法是不管你有没有执行完,反正我每隔几秒来执行一次,以相同的频率来执行
scheduleWithFixedDelay 这个是等你方法执行完后,我再隔几秒来执行,也就是相对延迟后,以固定的频率去执行
二、ExecutorService生命周期
ExecutorService扩展了Executor并添加了一些生命周期管理的方法。一个Executor的生命周期有三种状态,运行 ,关闭 ,终止 。Executor创建时处于运行状态。当调用ExecutorService.shutdown()后,处于关闭状态,isShutdown()方法返回true。这时,不应该再向Executor中添加任务,所有已添加的任务执行完毕后,Executor处于终止状态,isTerminated()返回true。
如果Executor处于关闭状态,往Executor提交任务会抛出unchecked exception RejectedExecutionException。
相关文章推荐
- android NDK 学习笔记(3)---eclipse 环境自动创建头文件.h ---javah
- 最全 Eclipse 快捷键
- Spring配置事务
- 在struts2中重定向加参数
- java笔记--关于线程同步(5种同步方式)【转】
- java调用外部exe程序并传参
- JAVA的数据存储
- 解决Maven工程中报 Missing artifact jdk.tools:jdk.tools:
- Spring MVC+MyBatis框架使用多个数据源以及之间的切换
- java cookies session 的思考。
- Java算法---发工资
- eclipse报错:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素
- Java并发编程:线程池的使用
- Spring REST for DELETE Request Method Not Supoorted
- Java算法---杨辉三角的打印输出
- Spring注解@Component、@Repository、@Service、@Controller区别
- spring源码之—Assert.notNull-断言
- 如何同时激活两个不同版本的MyEclipse 【MyEclipse2013和MyEclipse2014同时激活】
- android NDK 学习笔记(2)---eclipse 环境自动编译ndk-build
- 如何同时激活两个不同版本的MyEclipse 【MyEclipse2013和MyEclipse2014同时激活】