Java基础-多线程JUC-线程池和自定义线程池

news/2025/1/7 12:42:55/

1. 线程池

在这里插入图片描述

主要核心原理

在这里插入图片描述

不推荐Executors创建没有上线的线程池,建议使用自定义的线程池;
Java工具类创建线程池;

在这里插入图片描述

public class demo16 {public static void main(String[] args) {/*** public static ExecutorService newCachedThreadPoo1() 创建个没有上限的线程池* public static ExecutorService newFixedThreadPool (int nThreads) 创有上限的线程池*///1. 获取线程池对象//ExecutorService pool1 = Executors.newCachedThreadPool();ExecutorService pool1 = Executors.newFixedThreadPool(3);//2. 提交任务pool1.submit(new MyRunnable16());pool1.submit(new MyRunnable16());pool1.submit(new MyRunnable16());pool1.submit(new MyRunnable16());//3. 销毁线程池//pool1.shutdown();}
}
class MyRunnable16 implements Runnable {@Overridepublic void run() {for (int i = 1; i <= 100; i++) {System.out.println(Thread.currentThread().getName() + "---" + i);}}
}

2. 自定义线程池

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)

在这里插入图片描述

  1. 当只有3个任务时,直接上处理机运行;
  2. 当有6个任务时,任务1-3上处理机运行,任务4-6进入阻塞队列等待;
  3. 当有9个任务时,任务1-3上处理机运行,任务4-6进入阻塞队列等待,任务7-9由3个临时线程处理运行;
  4. 当有10个任务时,任务1-3上处理机运行,任务4-6进入阻塞队列等待,任务7-9由3个临时线程处理运行,任务10触发任务拒接策略(此时核心线程和临时线程均在工作,且阻塞队列已满);

在这里插入图片描述

任务拒接策略

在这里插入图片描述

示例代码:

public class poolDemo1 {public static void main(String[] args) {/*** ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor* (核心线程数量,最大线程数量,空闲线程最大存活时间,任务队列,创建线程工厂,任务的拒绝策略);* 参数一:核心线程数且   不能小于0* 参数二:最大线程数    不能小于等于0,最大数量 >= 核心线程数量* 参数三:空闲线程最大存活时间   不能小于0* 参数四:时间单位     用TimeUnit指定* 参数五:任务队列     不能为nu11* 参数六:创建线程工厂       不能为nu11* 参数七:任务的拒绝策略      不能为nu11*/ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3,6,60,TimeUnit.SECONDS,new ArrayBlockingQueue<>(3),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());// 开9个任务,观察输出结果比较明显threadPoolExecutor.submit(new MypoolRunnable());threadPoolExecutor.submit(new MypoolRunnable());threadPoolExecutor.submit(new MypoolRunnable());threadPoolExecutor.submit(new MypoolRunnable());threadPoolExecutor.submit(new MypoolRunnable());threadPoolExecutor.submit(new MypoolRunnable());threadPoolExecutor.submit(new MypoolRunnable());threadPoolExecutor.submit(new MypoolRunnable());threadPoolExecutor.submit(new MypoolRunnable());}
}
class MypoolRunnable implements Runnable {@Overridepublic void run() {for (int i = 1; i <= 100; i++) {System.out.println(Thread.currentThread().getName() + "---" + i);}}
}

自定义的线程池应该多大?

首先给出最大并行数,该cpu是10核16线程,最大并行数应该是16;
在这里插入图片描述

或者可以在idea中输出下面代码,也可以得到最大最大并行数;

System.out.println(Runtime.getRuntime().availableProcessors());

根据程序的类型,考虑cpu和I/O利用率

在这里插入图片描述


http://www.ppmy.cn/news/742451.html

相关文章

ExpandableListView Android 可展开视图QQ列表

ExpandableListView是Android平台提供的一个可展开的列表视图&#xff0c;它可以显示分组及其子项的数据。ExpandableListView继承自ListView&#xff0c;并提供了添加分组和子项、展开和折叠分组等功能。 使用ExpandableListView时&#xff0c;你需要使用一个适配器&#xff…

恢复qq好友

今天再来跟大家分享一个QQ技巧——如何恢复删除的qq好友呢&#xff1f;如果你曾经因误删了某位QQ好友而遗憾不已&#xff0c;那么&#xff0c;这个QQ技巧正好适合你。 那么&#xff0c;我们如何恢复删除的qq好友呢&#xff1f;路大侠跟你分享两个方法。 方法一 利用QQ好友恢复…

重装系统后的QQ聊天记录恢复方法与教程

重装系统后QQ聊天记录恢复方法 近日重新安装了系统&#xff0c;重新安装了腾讯的、TM&#xff0c;TM也是安装在之前的目录底下&#xff0c;但是聊天记录和之前的自定义表情都不见了&#xff0c;看来没有自动恢复回来。 我这里还有一个特殊的情况&#xff0c;早前我用的是QQ…

QQ聊天记录丢了怎么恢复

如果是由于存放QQ消息的文件的丢失&#xff0c;造成QQ聊天记录丢失的&#xff0c;可用EasyRecovery恢复QQ聊天记录。 用EasyRecovery如何恢复QQ聊天记录呢&#xff1f; 首先我们要知道QQ的聊天记录存放的位置。QQ的聊天记录文件通常是存放在QQ目录下以QQ号码为文件夹的“MsgEx.…

计算机中xp系统中qq文件,从做完xp系统怎样恢复qq文?

电脑系统反应迟钝怎么办每次网站或 方法1&#xff1a;一、为系统减负&#xff0c;系统文件“首当其冲”  家用电脑的操作系统从windows95到现在广泛使用的windows98和windowsXP&#xff0c;操作系统的文件随着系统功能的强大也越来越“占地”。 而将系统中平时用不着的“累赘…

苏州电脑数据恢复中心怎么样

有些苏州的电脑用户反映自己的电脑数据不慎丢失了&#xff0c;硬盘出现了些问题&#xff0c;自己不知道电脑数据恢复的方法&#xff0c;想送去一些苏州电脑数据恢复中心解决&#xff0c;不知道苏州电脑数据恢复中心怎么样&#xff0c;收费价格如何。下面就给大家解答下相关问题…

可以恢复qq好友的网址是哪个

在摆弄qq的时候不小心删错了好友怎么办?小编记得有个qq恢复网站&#xff0c;大家可以在哪里恢复下&#xff0c;并且对方不会知道你删除他哦!简单快捷有限&#xff0c;如果只有手机也可以&#xff0c;大家可以看看下面的手机恢复qq好友教程&#xff0c;只要删除不超过3年即可恢…

Web3.0 在中国市场的规模如何?其特点有什么?

随着区块链技术的不断发展和普及&#xff0c;Web3.0 作为下一代互联网的发展趋势&#xff0c;在中国市场也逐渐受到了关注和应用。那么&#xff0c;Web3.0 在中国市场的规模如何&#xff1f;其特点又有哪些呢&#xff1f; 首先&#xff0c;让我们来看一下 Web3.0 在中国市场的规…