Java 4种线程池的介绍
- 线程池是预先创建线程的一种技术。线程池在还没有任务到来之前,创建一定数量的线程
- 放入空闲队列中,然后对这些资源进行复用。减少频繁的创建和销毁对象
- java里面线程池的顶级接口是Executor,是一个执行程序的工具
- 线程池接口是ExecutorService
- java.util.concurrent包:并发编程中很常用的实用工具类
- Executor接口:执行已提交的Runnable任务对象
- ExcutorService接口:
- Executor提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况生成Future的方法
Executors类:
- 此包中所定义的Executor、ExecutorService等的工广和实用方法。
1.newSingleThreadExecutor:
- 创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行
- 所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池
- 保证所有任务的执行顺序按照任务提交顺序执行。
2.newFixedThreadPool
- 创建一个固定大小的线程池。每次提交一个任务就是创建一个线程,直到线程达到线程池最大大小。
- 线程池大小一旦达到最大值就会保持不变,
- 如果某个线程因为执行异常而结束,那么线程池会补充一个新线程
3.newCachedThreadPool:
- 创建一个可缓存的线程池。如果现场池的大小超过了处理任务所需要的现场,那么就会回收部分空闲(60秒不执行任务)的线程,
- 当任务数量增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖
- 于操作系统(或者说JVM)能够创建的最大线程大小。
4.newScheduledThreadPool:
- 创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务需求。
package com.vince;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 线程池是预先创建线程的一种技术。线程池在还没有任务到来之前,创建一定数量的线程
* 放入空闲队列中,然后对这些资源进行复用。减少频繁的创建和销毁对象
* java里面线程池的顶级接口是Executor,是一个执行程序的工具
* 线程池接口是ExecutorService
* java.util.concurrent包:并发编程中很常用的实用工具类
* Executor接口:执行已提交的Runnable任务对象
* ExcutorService接口:
* Executor提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况生成Future的方法
* Executors类:
* 此包中所定义的Executor、ExecutorService等的工广和实用方法。
* 1.newSingleThreadExecutor:
* 创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行
* 所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池
* 保证所有任务的执行顺序按照任务提交顺序执行。
* 2.newFixedThreadPool
* 创建一个固定大小的线程池。每次提交一个任务就是创建一个线程,直到线程达到线程池最大大小。
* 线程池大小一旦达到最大值就会保持不变,
* 如果某个线程因为执行异常而结束,那么线程池会补充一个新线程
* 3.newCachedThreadPool:
* 创建一个可缓存的线程池。如果现场池的大小超过了处理任务所需要的现场,那么就会回收部分空闲(60秒不执行任务)的线程,
* 当任务数量增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖
* 于操作系统(或者说JVM)能够创建的最大线程大小。
* 4.newScheduledThreadPool:
* 创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务需求。
*/
public class ThreadDemo5 {
public static void main(String[] args) {
//创建线程池4种
//单线程池
// ExecutorService es = Executors.newSingleThreadExecutor();
//固定大小线程池
//ExecutorService es= Executors.newFixedThreadPool(2);
//创建一个可缓存的线程池。如果现场池的大小超过了处理任务所需要的现场,那么就会回收部分空闲(60秒不执行任务)的线程,
// * 当任务数量增加时,此线程池又可以智能的添加新线程来处理任务。
//ExecutorService es= Executors.newCachedThreadPool();
ScheduledExecutorService es= Executors.newScheduledThreadPool(3);
// es.execute(new Myrunnable6());
// es.execute(new Myrunnable6());
es.schedule(new Myrunnable6(),3000, TimeUnit.MILLISECONDS);
es.shutdown();//结束
}
}
class Myrunnable6 implements Runnable{
@Override
public void run() {
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+"----"+i);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}