当前位置: 首页 > news >正文

线程池的应用

1.线程的执行机制

  • 线程分为用户线程 和 内核线程

    • 内核线程就是系统级别的线程,与cpu逻辑处理器数量对应的

    • 用户线程就是使用java代码创建的Thread对象

  • 用户线程必须与内核线程关联(映射),才能执行任务

  • 当用户线程多于内核线程时,内核线程就需要不停的上下文切换,使得多个用户线程都能得以执行

  • 上下文会影响性能,消耗资源。

  • 大量的创建用户线程,消耗用户线程,也会影响性能,消耗资源。

  • 所以我们希望,创建合适数量的线程,不要频繁的创建新线程和销毁线程,希望创建的线程可以反复利用

  • 我们就可以使用池化技术:线程池。

2.线程池的执行机制

  • 线程池是jdk1.5中 JUC提供的一个工具

  • 线程池的作用可以统一的创建,分配,管理,销毁线程。实现线程的复用。

3.线程池的应用

3.1拥有线程池

有两种方式,可以拥有线程池对象

  1. 手动创建线程池对象,需要传递7个参数

    JUC提供了3个可以创建线程池的类,我们最常用的就是ThreadPoolExecutor

  2. 通过JUC提供的工具类,快速获得线程池对象 (别人帮我们创建)

    JUC提供了一个Executors工具类,该工具类提供了5个静态方法,可以快速获得对象

3.2手动创建线程池(7个参数)

有4种重载方法

①需要5个参数      ②需要6个参数   5+a      ③需要6个参数   5+b      ④需要7个参数

1.  int corePoolSize : 核心线程数 , 池内线程数的下限,未达下限,优先创建新线程。达到下限,任务装入队列

2.  int maximumPoolSize : 最大线程数。队列满,创建更多线程,直到达到上限。拒绝任务

3.  long keepAliveTime : 线程空闲存活时间(数字)

4.  TimeUnit unit : 配合keepAliveTime , 指定存活时间(单位)

5.  BlockingQueue<Runnable> workQueue : 任务等待队列(阻塞队列)
                                    ArrayBlockingQueue ,底层数组,适合指定长度
                                    LinkedBlockingQueue,底层链表,适合无限长度
                                    DelayQueue , 适合延迟(定时)任务
                                    PriorityBlockingQueue  自认队列(元素自然有序,大小)
                                    SynchronousQueue 同步队列,只能存一个元素

6.  ThreadFactory threadFactory : 线程工厂,在线程池内部用来创建线程的。可以自定义

7.  RejectedExecutionHandler handler : 拒绝策略,当任务队列满,线程达到上下且都忙碌,新任务被拒绝
                                    juc提供了多种拒绝策略,也可以自定义
                                    AbortPolicy  拒绝任务,并抛出异常
                                    DiscardPolicy 拒绝任务,没有任何提示
                                    DiscardOldestPolicy 拒绝最总加入等待瑞列的任务,
                                                        新任务加入队列
                                    CallerRunsPolicy 拒绝任务,将任务交还给发起任务的线程

ThreadPoolExecutor pool=new ThreadPoolExecutor(5,10,5, TimeUnit.MICROSECONDS,new ArrayBlockingQueue(10));pool.execute(Runnable); //执行Runnable任务
pool.submit(Runnable); //获得Future对象,可以知道线程是否执行完毕,但无法获得返回值
pool.submit(Callable); //获得Future对象,可以知道线程是否执行完毕,也可以获得返回值
future.isDone();//快速获得boolean结果,用来判断任务是否执行完毕
future.get();//获得任务执行的结果,如果还没有执行完毕,当前线程会处于等待状态
pool.getPoolSize();//获得线程数
pool.prestartAllCoreThreads() ;//预先创建核心数量的线程
pool.allowCoreThreadTimeOut(true);//设置核心数量的线程也可以超时被销毁
Queue q = pool.getQueue();//获得任务队列
q.size(); //等待执行的任务数量
q.clear();
q.add();
q.remove();

相关文章:

线程池的应用

1.线程的执行机制 线程分为用户线程 和 内核线程 内核线程就是系统级别的线程&#xff0c;与cpu逻辑处理器数量对应的 用户线程就是使用java代码创建的Thread对象 用户线程必须与内核线程关联&#xff08;映射&#xff09;&#xff0c;才能执行任务 当用户线程多于内核线程时…...

OPenCV结构分析与形状描述符(5)查找图像中的连通组件的函数connectedComponents()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 connectedComponents 函数计算布尔图像的连通组件标签图像。 该函数接受一个具有4或8连通性的二值图像&#xff0c;并返回 N&#xff0c;即标签…...

HCIA--实验十三:VLAN间通信子接口实验/双单臂路由实验

一、实验内容 1.需求/要求&#xff1a; 将两个单臂路由通过两台交换机连接起来&#xff0c;成为双臂路由&#xff0c;并探讨这么做的原因。实现全网通&#xff0c;让任何一台主机之间都可以通信。 二、实验过程 1.拓扑图&#xff1a; 2.步骤&#xff1a; 1.给PC配置ip地址…...

AIStarter市场指南:项目分享与框架优化【AI绘画、写作、对话、办公、设计】

随着人工智能技术的飞速发展&#xff0c;越来越多的开发者和爱好者希望能够将自己的创意和项目分享给更多人。AIStarter作为一个专注于AI领域的平台&#xff0c;正致力于打造一个开放的应用市场&#xff0c;让创作者能够轻松分享他们的项目&#xff0c;同时也方便其他用户下载和…...

机器学习第8章 集成学习

目录 个体与集成BoostingBagging与随机森林Bagging随机森林 结合策略平均法投票法学习法 个体与集成 定义&#xff1a;集成学习&#xff0c;也叫多分类器系统、基于委员会的学习等&#xff0c;它是一种通过结合多个学习器来构建一个更强大的学习器的技术。如下图所示 在这里&a…...

京东鸿蒙上线前瞻——使用 Taro 打造高性能原生应用

背景 2024 年 1 月&#xff0c;京东正式启动鸿蒙原生应用开发&#xff0c;基于 HarmonyOS NEXT 的全场景、原生智能、原生安全等优势特性&#xff0c;为消费者打造更流畅、更智能、更安全的购物体验。同年 6 月&#xff0c;京东鸿蒙原生应用尝鲜版上架华为应用市场&#xff0c…...

day2 QT

作业 2> 在登录界面的登录取消按钮进行以下设置&#xff1a; 使用手动连接&#xff0c;将登录框中的取消按钮使用第2种方式的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断…...

JS_函数声明

JS中的方法,多称为函数,函数的声明语法和JAVA中有较大区别 函数说明 函数没有权限控制符不用声明函数的返回值类型,需要返回在函数体中直接return即可,也无需void关键字参数列表中,无需数据类型调用函数时,实参和形参的个数可以不一致声明函数时需要用function关键字函数没有…...

快速排序+归并排序代码回顾

快速排序与归并排序简介&#xff1a; quick_sort为快速排序&#xff0c;merge_sort为归并排序&#xff0c;两者基于分治的思想&#xff1b; 快速排序&#xff0c;简称快排&#xff0c;它以原来数组中的一个值&#xff08;我们记为x&#xff09;作为界限&#xff0c;将比它小…...

DBC中一种特殊的特殊的Signal—多路复用Signal

前言&#xff1a; DBC设计中一般设计Signal时其实存在三种类型&#xff0c;如下图所示&#xff1a; **1&#xff09;步骤1&#xff0c;鼠标单击展开Message&#xff0c;选中底下的Signal **2&#xff09;步骤2&#xff0c;弹出dialog中选择 map signal **3&#xff09;得到…...

前端基础面试题·第三篇——JavaScript(其三)

1.字符串 (1) 常用方法 1.charAt(index) 返回指定位置的字符,若没找到&#xff0c;则返回空2.charCodeAt(index) 返回指定位置的unicode字符编码,若没找到&#xff0c;则返回空 3.String.concat(str1,str2) 连接多个字符串&#xff0c;并返回新字符串4.String.fromCharCode(co…...

MacBook真的不能打游戏吗?Mac打游戏会损坏电脑吗?苹果电脑怎么玩游戏

MacBook从来都是高端的代名词&#xff0c;超强的性能搭配顶尖的系统&#xff0c;不光处理大型文件时举重若轻&#xff0c;长期使用也不会有明显卡顿。但很多人在需要MacBook一流的生产力同时&#xff0c;也希望能在空闲时体验游戏的乐趣。在大多人的印象里&#xff0c;Mac电脑对…...

安卓逆向(之)真机root(红米手机)

概览&#xff1a; 1, 手机解锁 2, 下载官方系统包&#xff0c;推荐线刷包,取出镜像文件 3, magisk工具修补 官方系统包 4, adb&#xff1a;命令对手机刷 root 5, 完成 6, 小米手机解锁 点击 小米手机解锁OEM官方教程 记得数据线连接手机电脑 工具下载 点击 下载adb(电脑操作…...

关于转行网络安全的一些建议

在当前就业形势下&#xff0c;不少朋友面临转行的困境。网络安全作为一个热门领域&#xff0c;自然也吸引了许多人的目光。本文将就转行网络安全这一话题&#xff0c;提供一些切实可行的建议。 网络安全行业概况 网络安全涵盖了从基础的脚本编写到高级的漏洞研究等多个层面。该…...

(六十五)第 10 章 内部排序(希尔排序)

示例代码 shellSort.h // // 希尔排序实现头文件#ifndef SHELL_SORT_H #define SHELL_SORT_H#include "errorRecord.h"#define NUM 10 #define MAX_SIZE 20#define EQUAL(a, b) ((a) == (b)) #define LESS_THAN(a, b) ((a) < (b)) #define LESS_OR_EQUAL(a, b) ((…...

802.11 中 scrambler的matlab仿真

802.11a和802.11n中的scrambler仿真不可以直接用matlab中的comm.Scrambler函数。因为这个函数实现的是multiplicative scrambling&#xff0c;而802.11a和802.11n中的scrambler使用的是additive scrambling。additive scrambling使用异或操作进行扰码&#xff0c;multiplicativ…...

centos 服务器 多网卡 ip 地址 设置

centos 服务器 多网卡 ip 地址 设置 https://blog.csdn.net/xh_w20/article/details/141574357 cd /etc/sysconfig/network-scripts/ sudo systemctl status network ● network.service - LSB: Bring up/down networkingLoaded: loaded (/etc/rc.d/init.d/network; bad; v…...

什么是大数据、有什么用以及学习内容

目录 1.什么是大数据&#xff1f; 2.大数据有什么用&#xff1f; 2.1商业与营销&#xff1a; 2.2医疗与健康&#xff1a; 2.3金融服务&#xff1a; 2.4政府与公共服务&#xff1a; 2.5交通与物流&#xff1a; 2.6教育与个性化学习&#xff1a; 3.学习大数据需要学习哪…...

ZBrush与Blender雕刻功能哪个更好些?

选择正确的3D软件首先会让你的创作过程更加轻松&#xff0c;尤其是在动画或大片电影制作方面。不同的软件提供不同的功能&#xff0c;并倾向于专注于特定领域&#xff0c;如绘画、动画或雕刻。如果你选择了适合你风格和目标的软件&#xff0c;你可以创作出极具创意的作品。 在…...

软件工程技术专业软件开发综合实训室解决方案

一、行业背景与前景分析 1.1 软件工程技术专业就业前景 近年来&#xff0c;中国的软件行业取得了显著的成就&#xff0c;即便在全球经济受到新冠疫情冲击的情况下&#xff0c;仍保持了强劲的增长势头。据工业和信息化部发布的数据&#xff0c;2021年我国软件和信息技术服务业…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...