1、降低资源的消耗
2、提高响应的速度
3、方便管理。
线程池可以达到:线程复用、可以控制最大并发数、管理线程的目的
package pool;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* study01
*
* @author : xgj
* @description : de
* @date : 2020-09-21 10:18
**/
public class ThreadPool {
public static void main(String[] args) {
//创建只有一个线程的线程池,但是其阻塞队列长度可以达到Integer.MAX_VALUE
ExecutorService threadPool = Executors.newSingleThreadExecutor();
for (int i = 0; i <10 ; i++) {
threadPool.execute(()->{
//输出线程名
System.out.println(Thread.currentThread().getName());
});
}
//使用完成后需要进行关闭
threadPool.shutdown();
}
}
运行截图
package pool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* study01
*
* @author : xgj
* @description : de
* @date : 2020-09-21 10:18
**/
public class ThreadPool {
public static void main(String[] args) {
//创建指定个数的线程池,其阻塞队列长度可以达到Integer.MAX_VALUE
ExecutorService threadPool = Executors.newFixedThreadPool(5);
for (int i = 0; i <10 ; i++) {
threadPool.execute(()->{
//输出线程的名字
System.out.println(Thread.currentThread().getName());
});
}
//使用完成后需要进行关闭
threadPool.shutdown();
}
}
运行结果:
package pool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* study01
*
* @author : xgj
* @description : de
* @date : 2020-09-21 10:18
**/
public class ThreadPool {
public static void main(String[] args) {
//创建个数动态添加的线程池,其数量可以达到Integer.MAX_VALUE
ExecutorService threadPool = Executors.newCachedThreadPool();
for (int i = 0; i <10 ; i++) {
threadPool.execute(()->{
//输出线程的名字
System.out.println(Thread.currentThread().getName());
});
}
//使用完成后需要进行关闭
threadPool.shutdown();
}
}
运行结果:
但是实际开发中最好不要通过Executors创建,而是自己通过ThreadPoolExecutor创建,这样可以自定义设定参数,策略。
原文:https://www.cnblogs.com/jiezao/p/13704385.html