Java并发编程---Executors多任务线程框架
2018-01-07 15:14
489 查看
一.概念
为了更好地控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效地进行线程控制.他们都在java.util.concurrent包中,是JDK并发包的核心.其中有一个比较重要的类Executors,他扮演这线程工厂的角色,我们通过Executors可以创建特定功能的线程池.
Executors创建线程池的方法:
newFixedThreadPool()方法,该方法返回一个固定数量的线程池,该方法的线程数始终不变,当有一个任务提交时,若线程池中空闲,则立即执行;若没有,则会被暂缓在一个任务队列中等待有空闲的线程去执行.
newSingleThreadExecutor()方法,创建一个线程的线程池,若空闲则执行,若没有空闲线程则暂缓在任务队列中
newCachedThreadPool()方法,返回一个可根据实际情况调整线程数量的线程池,不限制最大线程数量,若有任务,则创建线程;若无任务,则不创建线程.若果没有任务,则线程在60s后自动回收(空闲时间60s)
newScheduledThreadPool()方法,该方法返回一个ScheduledExecutorService对象,但该线程池可以指定线程的数量
二.使用示例
2.1 newFixedThreadPool()方法JDK底层实现
2.2 newSingleThreadExecutor()方法JDK底层实现
2.3 newCachedThreadPool() 方法JDK底层实现
2.4 newScheduledThreadPool() 方法JDK底层实现
为了更好地控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效地进行线程控制.他们都在java.util.concurrent包中,是JDK并发包的核心.其中有一个比较重要的类Executors,他扮演这线程工厂的角色,我们通过Executors可以创建特定功能的线程池.
Executors创建线程池的方法:
newFixedThreadPool()方法,该方法返回一个固定数量的线程池,该方法的线程数始终不变,当有一个任务提交时,若线程池中空闲,则立即执行;若没有,则会被暂缓在一个任务队列中等待有空闲的线程去执行.
newSingleThreadExecutor()方法,创建一个线程的线程池,若空闲则执行,若没有空闲线程则暂缓在任务队列中
newCachedThreadPool()方法,返回一个可根据实际情况调整线程数量的线程池,不限制最大线程数量,若有任务,则创建线程;若无任务,则不创建线程.若果没有任务,则线程在60s后自动回收(空闲时间60s)
newScheduledThreadPool()方法,该方法返回一个ScheduledExecutorService对象,但该线程池可以指定线程的数量
二.使用示例
package com.thread.executors; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 多任务线程框架 * @author lhy * @time 2017.01.05 * */ public class UseExecutors { public static void main(String[] args) { // TODO Auto-generated method stub ExecutorService pool = Executors.newFixedThreadPool(10); //定义固定的线程池数量 ExecutorService pool2 = Executors.newSingleThreadExecutor(); ExecutorService pool3 = Executors.newCachedThreadPool(); ExecutorService pool4 = Executors.newScheduledThreadPool(10); } }
2.1 newFixedThreadPool()方法JDK底层实现
public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); }
2.2 newSingleThreadExecutor()方法JDK底层实现
public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>())); }
2.3 newCachedThreadPool() 方法JDK底层实现
public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); }
2.4 newScheduledThreadPool() 方法JDK底层实现
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) { return new ScheduledThreadPoolExecutor(corePoolSize); }
相关文章推荐
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- Java线程与并发编程实践----并发工具类与Executor框架
- Java并发编程之线程管理(Executor框架12)
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- java并发编程--Executor框架(一) 摘要: Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- Java并发编程之线程管理(Executor框架16)
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务
- Java并发编程之线程管理(Executor框架15)
- JAVA 并发编程随笔【五】Thread线程创建及运行线程任务