Java四种线程池介绍
来源:互联网 发布:mysql 转字符串函数 编辑:程序博客网 时间:2024/06/03 04:41
Java四种线程池
java.util.concurrent.Executors工厂类可以创建四种类型的线程池,通过Executors.newXXX方法即可创建。
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
FixedThreadPool
public static ExecutorService newFixedThreadPool(int nThreads){ return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());}
- FixedThreadPool是一种容量固定的线程池;
- 阻塞队列采用LinkedBlockingQueue,它是一种无界队列;
- 由于阻塞队列是一个无界队列,因此永远不可能拒绝执行任务;
- 由于采用无界队列,实际线程数将永远维持在nThreads,因此maximumPoolSize和keepAliveTime将无效。
CachedThreadPool
public static ExecutorService newCachedThreadPool(){ return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());}
- CachedThreadPool是一种可以无限扩容的线程池;
- CachedThreadPool比较适合执行时间片比较小的任务;
- keepAliveTime为60,意味着线程空闲时间超过60s就会被杀死;
- 阻塞队列采用SynchronousQueue,这种阻塞队列没有存储空间,意味着只要有任务到来,就必须得有一个工作线程来处理,如果当前没有空闲线程,那么就再创建一个新的线程。
SingleThreadExecutor
public static ExecutorService newSingleThreadExecutor(){ return new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());}
- SingleThreadExecutor只会创建一个工作线程来处理任务。
ScheduledThreadPool
- ScheduledThreadPool接收SchduledFutureTask类型的任务,提交任务的方式有2种;
1. scheduledAtFixedRate;
2. scheduledWithFixedDelay;
- SchduledFutureTask接收参数:
time:任务开始时间
sequenceNumber:任务序号
period:任务执行的时间间隔
- 阻塞队列采用DelayQueue,它是一种无界队列;
- DelayQueue内部封装了一个PriorityQueue,它会根据time的先后排序,若time相同,则根据sequenceNumber排序;
- 工作线程执行流程:
1. 工作线程会从DelayQueue中取出已经到期的任务去执行;
2. 执行结束后重新设置任务的到期时间,再次放回DelayQueue。
- java的四种线程池介绍
- Java四种线程池介绍
- Java的四种线程池以及参数介绍
- java 线程池详解及四种线程池用法介绍
- java 四种线程池
- Java四种线程池
- Java 四种线程池
- java四种线程池
- Java四种线程池
- Java四种线程池
- java 四种 线程池
- Java 四种线程池
- java四种线程池
- java四种线程池
- JAVA四种线程池
- java四种线程池
- Java 四种线程池
- Java四种线程池
- Jsonp解决ajax跨域问题
- 简述Android 解决65536/64K方法数限制方案
- Java中运行动态脚本Groovy
- DedeCMS提示Maximum execution time of 30 seconds的解决办法
- 解决tomcat时区错误问题
- Java四种线程池介绍
- 关于Androidstudio supportV7错误
- ubuntu 安装Qt与卸载
- Visual Studio Code安装到Ubuntu 17.10
- DedeCms 设置附件上传目录无效的解决办法
- Java高级之线程(一)
- Git-2.15.1.2-64-bit.ex
- caffe之python接口实战 :brewing-logreg 官方教程源码解析
- ubuntu 查看进程信息