目录
4.2、我们刚刚提到的临时线程数,那到底什么时候创建临时线程呢?
1、什么是线程池,作用是什么?
线程池就是一个池子,里面放置着线程和任务。
如果不使用线程池,则每进来一个任务都会创建一个线程,进来一百万个任务就会创建一百万个线程池,这样会非常的消耗资源,线程池的作用可以设置创建线程的数量,让线程只创建一次,让这些线程创建好的线程重复去处理任务,不需要重新创建。
2、生活举例
一家餐厅有1000个顾客,服务员就是线程,顾客就是任务。我们不需要招聘1000个服务员,我们只需要3个服务员,让顾客排队,服务员服务完一个客户接着去服务下一个就好了,大大降低了资源的消耗。
3、要记住的几个参数概念
以餐厅为例
1、核心线程---> 餐厅正式工 招3个
2、最大线程(核心线程 + 临时线程)--> 最多招几个人 最多招5个人,即3个正式工+ 2个临时工
3、临时线程的存活时间 -->临时工多久被开除 来帮忙2天就被开除
4、临时线程的存货时间单位(时、分、秒)--->天
5、指定线程池的任务队列 ---> 顾客在门口排队的地方的大小 (可以指定只能排队几个人,也可以不指定,即来者不拒,等着就行)
6、指定线程池的线程工厂,为线程池创建线程的 --->负责招聘员工的hr(可以直接用已有的工厂)
7、指定线程池的任务拒绝策略()--->顾客太多,忙不过来怎么处理(4种方式)
4、代码演示,以及线程池参数说明--Runnable
4.1、不指定线程池的任务队列大小的例子
import java.util.concurrent.*;
//线程池案例
public class ThreadPoolNow {
public static void main(String[] args) {
ExecutorService pool = new ThreadPoolExecutor(3, 5, 8,
TimeUnit.SECONDS,
new LinkedBlockingDeque<>(), // 这个表示不限制任务,来者不拒
Executors.defaultThreadFactory(), //线程工厂,为线程池创建线程的,获取一个默认的线程池工厂
new ThreadPoolExecutor.AbortPolicy() //表示新任务过来我们没有办法去处理,这个写法会抛出异常。一共4种情况,下面会讲解
);
Runnable runnable = new MyThread();
pool.execute(runnable);
pool.execute(runnable);
pool.execute(runnable);
}
}
class MyThread implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "线程池测试");
}
}

&spm=1001.2101.3001.5002&articleId=143664758&d=1&t=3&u=559bae64f72744c1b92de49088f5b650)
1600

被折叠的 条评论
为什么被折叠?



