java线程池【转】
2016-04-06 10:34
330 查看
Executor是一个顶层接口,在它里面只声明了一个方法execute(Runnable),返回值为void,参数为Runnable类型,
从字面意思可以理解,就是用来执行传进去的任务的;
然后ExecutorService接口继承了Executor接口,并声明了一些方法:submit、invokeAll、invokeAny以及shutDown等;
抽象类AbstractExecutorService实现了ExecutorService接口,基本实现了ExecutorService中声明的所有方法;
然后ThreadPoolExecutor继承了类AbstractExecutorService。
Executors这个工具类中提供了如下静态方法:
Executors.newCachedThreadPool() 无限大小的线程池,线程会自动重用
Executors.newFixedThreadPool(int) 固定线程数的线程池
Executors.newSingleThreadExecutor() 单线程执行器
按照Executors类中的几个工厂方法,分别使用的是:
LinkedBlockingQueue。FixedThreadPool和SingleThreadExecutor使用的是这个BlockingQueue,队列长度是无界的,适合用于提交任务相互独立无依赖的场景。
SynchronousQueue。 CachedThreadPool使用的是这个BlockingQueue,通常要求线程池不设定最大的线程数,以保证提交的任务有机会执行而不被丢掉。通常这个适合任务间有依赖的场景。
当然,开发者也可以定制ThreadPoolExecutor时使用ArrayBlockingQueue有界队列
从字面意思可以理解,就是用来执行传进去的任务的;
然后ExecutorService接口继承了Executor接口,并声明了一些方法:submit、invokeAll、invokeAny以及shutDown等;
抽象类AbstractExecutorService实现了ExecutorService接口,基本实现了ExecutorService中声明的所有方法;
然后ThreadPoolExecutor继承了类AbstractExecutorService。
Executors这个工具类中提供了如下静态方法:
Executors.newCachedThreadPool() 无限大小的线程池,线程会自动重用
Executors.newFixedThreadPool(int) 固定线程数的线程池
Executors.newSingleThreadExecutor() 单线程执行器
按照Executors类中的几个工厂方法,分别使用的是:
LinkedBlockingQueue。FixedThreadPool和SingleThreadExecutor使用的是这个BlockingQueue,队列长度是无界的,适合用于提交任务相互独立无依赖的场景。
SynchronousQueue。 CachedThreadPool使用的是这个BlockingQueue,通常要求线程池不设定最大的线程数,以保证提交的任务有机会执行而不被丢掉。通常这个适合任务间有依赖的场景。
当然,开发者也可以定制ThreadPoolExecutor时使用ArrayBlockingQueue有界队列
相关文章推荐
- 【LeetCode-73】Set Matrix Zeroes
- java 字符串转成 json 数组并且遍历
- springMVC的执行流程
- 使用zabbix-java-gateway监控JVM
- SpringMVC中的拦截器
- Spring AOP 实现原理
- java的类加载机制
- eclipse有时候不单独打印当前程序的LOG日志处理方法
- 【Java集合源码剖析】Vector源码剖析
- eclipse使用---java项目名称上有红色感叹号
- 最简单的例子理解java回调
- CompletionService
- fork-join框架
- RSA加密解密
- spring的bean获取项目根目录
- Java对象的强、软、弱和虚引用
- java servlet Filter 详解
- java实现屏幕截图
- 通过反编译深入理解Java String及intern
- eclipse使用----如何在Eclipse中查看JDK类库的源代码