浅谈线程池

2023-02-22  本文已影响0人  ButICare_b72d

一、创建一个线程池

corePoolSize:核心线程数——最小空闲线程数(这很重要)

maximumPoolSize:最大线程数——核心线程+非核心线程数了

keepAliveTime:空闲线程等待新线程加入间隔时间

unit:空闲线程等待新线程加入间隔时间单位

workQueue:等待执行的线程队列

threadFactory:用于创建新线程的工厂类,可以用于自定义线程名称

handler:用于执行拒绝策略

二、线程池的基本使用

2.1示例代码

import java.util.concurrent.*;

import java.util.concurrent.atomic.AtomicInteger;

public class Main {

public static void main(String[]args) {

/**

* 业务需求

* 你在网上同时约了20个女神奔现

* 你忙不过来找了一个兄弟陪你一起

* 约了2个贵宾室2个普通包间(只能在贵宾室或包间内聊天)

* 酒店的大厅有8个座位

* 打算每个女神聊三秒(真男人系列)

* 请开始你的表演

*/

Executor executor = new ThreadPoolExecutor(2, 4, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(8), new ThreadFactory() {

AtomicInteger chatNum = new AtomicInteger(0);

@Override

public ThreadnewThread(Runnable r) {

return new Thread(r, "聊天室" + chatNum.getAndIncrement());

}

}, new RejectedExecutionHandler(){

@Override

public void rejectedExecution(Runnabler, ThreadPoolExecutor executor) {

System.out.println("女神,不好意思,贵宾室和包间都挤满了!!!");

}

});

for (int i = 0; i < 20; i++) {

executor.execute(() -> {

try {

System.out.println("我在" + Thread.currentThread().getName() + "和女神聊3秒钟的天");

Thread.sleep(3000);

} catch(InterruptedException e) {

throw new RuntimeException(e);

}

});

}

}

}

2.2执行结果

2.3执行过程分析图

三、其余四种线程池(不推荐使用)

预知后事如何,请听下回分解

原文链接:https://blog.csdn.net/qq_24679971/article/details/129192470

上一篇 下一篇

猜你喜欢

热点阅读