import java.util.concurrent.*;
/**
* @description: 自定义过线程池代码示例
* @author: xz
*/
public class MyThreadPoolDemo1 {
public static void main(String[] args) {
/**
* 通过ThreadPoolExecutor创建线程池
*
* 参数1:corePoolSize 核心线程数 定义为2
* 参数2:maximumPoolSize 最大线程数 定义为5
* 参数3:keepAliveTime 多余的空闲线程存活时间 定义为1
* 参数4:unit keepAliveTime的单位 定义为秒
* 参数5:workQueue 任务队列 定义为3
* 参数6:threadFactory 线程工厂
* 参数7:handler 拒绝策略 使用默认策略 直接抛出RejectedException异常阻止系统正常运行
* */
ExecutorService threadPool = new ThreadPoolExecutor(
2,
5,
1L,
TimeUnit.SECONDS,
new LinkedBlockingDeque<>(3),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy());
try {
//模拟16个用户办理业务,每个用户就是一个来自外部的请求线程
for(int i=1;i<=16;i++){
threadPool.execute(()->{
System.out.println(Thread.currentThread().getName()+"");
});
}
}catch (Exception e){
e.printStackTrace();
}finally {
threadPool.shutdown();
}
}
}
import java.util.concurrent.*;
/**
* @description: 自定义过线程池代码示例
* @author: xz
*/
public class MyThreadPoolDemo1 {
public static void main(String[] args) {
/**
* 通过ThreadPoolExecutor创建线程池
*
* 参数1:corePoolSize 核心线程数 定义为2
* 参数2:maximumPoolSize 最大线程数 定义为5
* 参数3:keepAliveTime 多余的空闲线程存活时间 定义为1
* 参数4:unit keepAliveTime的单位 定义为秒
* 参数5:workQueue 任务队列 定义为3
* 参数6:threadFactory 线程工厂
* 参数7:handler 拒绝策略 使用CallerRunsPolicy拒绝策略 既不会抛弃任务,也不会抛出异常,而是将某些任务回退到调用者
* */
ExecutorService threadPool = new ThreadPoolExecutor(
2,
5,
1L,
TimeUnit.SECONDS,
new LinkedBlockingDeque<>(3),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy());
try {
//模拟16个用户办理业务,每个用户就是一个来自外部的请求线程
for(int i=1;i<=16;i++){
threadPool.execute(()->{
System.out.println(Thread.currentThread().getName()+"");
});
}
}catch (Exception e){
e.printStackTrace();
}finally {
threadPool.shutdown();
}
}
}
import java.util.concurrent.*;
/**
* @description: 自定义过线程池代码示例
* @author: xz
*/
public class MyThreadPoolDemo1 {
public static void main(String[] args) {
/**
* 通过ThreadPoolExecutor创建线程池
*
* 参数1:corePoolSize 核心线程数 定义为2
* 参数2:maximumPoolSize 最大线程数 定义为5
* 参数3:keepAliveTime 多余的空闲线程存活时间 定义为1
* 参数4:unit keepAliveTime的单位 定义为秒
* 参数5:workQueue 任务队列 定义为3
* 参数6:threadFactory 线程工厂
* 参数7:handler 拒绝策略 使用DiscardOldestPolicy拒绝策略 抛弃队列中等待最久的任务,然后把当前任务加入队列中尝试再次提交
* */
ExecutorService threadPool = new ThreadPoolExecutor(
2,
5,
1L,
TimeUnit.SECONDS,
new LinkedBlockingDeque<>(3),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.DiscardOldestPolicy());
try {
//模拟16个用户办理业务,每个用户就是一个来自外部的请求线程
for(int i=1;i<=16;i++){
threadPool.execute(()->{
System.out.println(Thread.currentThread().getName()+"");
});
}
}catch (Exception e){
e.printStackTrace();
}finally {
threadPool.shutdown();
}
}
}
一般的公式:CPU核数+1个线程的线程池。
比如:CPU核数 * 2
参考公式:CPU / 1-阻塞系数(阻塞系数在0.8~0.9之间)
比如8核的CPU:8/1 -0.9 =80个线程数
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://wwwxz.blog.csdn.net/article/details/122611468
内容来源于网络,如有侵权,请联系作者删除!