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

线程池——Java

一、前言

        在字符串常量池中,字符串常量在java程序运行之前就已经创建好了,等程序运行起来后,就可以直接从常量池中拿到字符串并加载到内存中,这样的设计就省下了字符串的构造与销毁的内存开销。

二、优势

        操作系统由内核与应用程序构成,当一段代码是在应用程序中运行的,那么整个执行过程就是可控的,更加高效;当一段代码在内核中运行时,java程序员就无法监视到程序的执行情况,就导致代码的执行是不可控的。

        对于线程也是同样的,当我们从线程池获取线程时,在应用程序层面就可以完成,消耗的资源更小,同时也是可控的;当在操作系统中创建线程时,就需要内核的配合完成,整个过程是不可控的,也会消耗过多的资源。

        因此,线程池可以高效的地创建、销毁线程。

三、标准库的线程池

1、ThreadPoolExecutor

使用ThreadPoolExecutor创建线程时,涉及到以下七个参数:

1)核心线程数:int corePoolSize

当线程池创建时,这些线程也会随之创建,直到线程池销毁后这些线程才会销毁;

2)最大线程数:int maximumPoolSize

最大线程数 = 核心线程数 + 非核心线程数

非核心线程就是在程序不繁忙的时候就销毁,繁忙时就创建;

3)非核心线程允许空闲的时间:long keepAliveTime
4)上述时间的时间按类型:TimeUnit unit

有秒,分钟,还是其他类型;

5)工作队列(传递任务的阻塞队列):BolckingQueue<Runnable> workQueue

线程池本质上是生产消费模型,调用submit方法即为生产,线程池中的线程即为消耗;

6)线程工厂:ThreadFactory threadFactory

使用工厂模式创建的线程,这里会对线程进行初始化操作;

7)拒绝策略:RejectedExecutionHandler handler

使用submit将任务添加到阻塞队列时,当队列满后就会产生阻塞,但是对于线程池来说不是真的阻塞,而是执行拒绝策略相关的代码,有如下几种拒绝策略:

ThreadPoolExecutor.AbortPolicy(),线程池直接抛出异常;

ThreadPoolExecutor.CallerRunsPolicy(),让调用submit的线程执行任务;

ThreadPoolExecutor.DiscardOldestPolicy(),丢弃最老的任务;

ThreadPoolExecutor.DiscardPolicy(),丢弃最新的任务,即submit的任务

2.Executors

        是线程池的工厂类,使用该类创建线程池,返回的是ExecutorService类型的线程池,有以下几种创建线程池的方式:

1)newFixedThreadPool

创建固定线程数目(核心线程数)的线程池

ExecutorService executorService = Executors.newFixedThreadPool(10);
2)newCachedThreadPool

创建线程数目动态增长的线程池:

ExecutorService executorService = Executors.newCachedThreadPool();

也可以将线程工厂作为参数传入到newCachedThreadPool中;

3)newSingleThreadExecutor

创建单个线程的线程池

ExecutorService executorService = Executors.newSingleThreadExecutor();

四、注意事项

线程池中的线程是前台线程,会阻止线程结束,有如下几种解决方案:

1)setDaemon(true)

将线程设置为后台线程;

2)shutdown()

将线程池中的线程全部关闭,但不能保证所有的任务都执行完;

3)awaitTermination()

确认所有任务都执行完后才关闭线程。

相关文章:

线程池——Java

一、前言 在字符串常量池中&#xff0c;字符串常量在java程序运行之前就已经创建好了&#xff0c;等程序运行起来后&#xff0c;就可以直接从常量池中拿到字符串并加载到内存中&#xff0c;这样的设计就省下了字符串的构造与销毁的内存开销。 二、优势 操作系统由内核与应用程…...

java 17天 TreeSet以及Collections

SortedSet TreeSet Collections 所有单值集合 1 SortedSet 特点&#xff1a;有序 唯一 实现类&#xff1a;TreeSet 利用TreeSet特有的对数据进行升序&#xff0c;再放到ArryList进行for下标倒序打印&#xff0c;或者利用自身的pollLast&#xff08;&#xff09;取出最后元…...

JavaScript 第27章:构建工具与自动化

在现代JavaScript开发中&#xff0c;构建工具、代码转换工具、代码质量和代码格式化工具对于提高开发效率、保持代码整洁以及确保代码质量有着至关重要的作用。下面将分别介绍Webpack、Babel、ESLint和Prettier的配置与使用&#xff0c;并给出一些示例。 1. 构建工具&#xff…...

Android原生ROM出现WIFI显示网络连接受限,网络无法连接的问题

Android原生ROM出现WIFI显示网络连接受限,网络无法连接的问题 最近手里一台乐视的手机root后, 连接wifi时一直提示网络连接受限,wifi图标显示叹号. 但是不影响正常的网络访问. 解决办法: adb shell settings delete global captive_portal_modeadb shell settings put globa…...

如何实现网页上的闪烁效果

在网页上实现闪烁效果通常可以通过CSS或者JavaScript来完成。有两种方法&#xff1a;一种是使用纯CSS&#xff0c;另一种是结合JavaScript来创建更复杂的闪烁效果。 方法一&#xff1a;使用纯CSS CSS中可以使用animation属性来创建简单的动画效果&#xff0c;包括闪烁效果。这…...

事件总线—Event Bus 使用及讲解

一、工作原理 事件总线&#xff0c;主要用来实现非父子组件之间的传值。 它的工作原理&#xff1a;通过new Vue()再创建一个新的 Vue 实例对象bus&#xff0c;将这个新的实例对象作为桥梁&#xff0c;来实现两个组件之间的传值。 二、工作步骤 1、创建事件总线 bus 我们可以…...

信息安全工程师(67)网络流量清洗技术与应用

前言 网络流量清洗技术是现代网络安全领域中的一项关键技术&#xff0c;它主要用于过滤和清理网络流量中的恶意部分&#xff0c;确保正常的网络通信。 一、网络流量清洗技术的定义与原理 网络流量清洗技术&#xff0c;也称为流量清理&#xff08;Traffic Scrubbing&#xff09;…...

【项目】论坛系统测试

文章目录 一、项目介绍二、测试环境三、测试用例3.1 论坛系统功能测试用例3.2 论坛系统非功能测试用例 四、测试计划1. 手工测试1.1 注册页面1.2 登陆页面1.3 主页面&#xff08;列表页&#xff09; 2. 自动化测试2.1 添加对应的依赖2.2 Utils类&#xff08;公有类&#xff09;…...

XJ02、消费金融|消费金融业务模式中的主要主体

根据所持有牌照类型的不同&#xff0c;消费金融服务供给方主要分为商业银行、汽车金融公司、消费金融公司和小贷公司&#xff0c;不同类型机构定位不同、提供消费金融服务与产品类型也各不相同。此外&#xff0c;互联网金融平台也成为中国消费金融业务最重要的参与方之一&#…...

基于神经网络的农业病虫害损失预测

【摘 要】鉴于农业病虫害经济损失的预测具有较强的复杂性和非线性特性&#xff0c;设计了一种新型的GRNN预测模型&#xff0c;对农业病虫害经济损失进行预测。该模型基于人工神经网络捕捉非线性变化独特的优越性&#xff0c;在神经网络技术和江苏省气象局提供的数据的基础上&am…...

【DSP】TI 微控制器和处理器的IDE安装CCSTUDIO

【DSP】TI 微控制器和处理器的IDE安装CCSTUDIO 1.背景2.下载IDE3.安装IDE1.背景 TI:Texas instruments即德州仪器公司。 https://www.ti.com.cn/CCSTUDIO即Code Composer Studio。 Code Composer Studio 是适用于 TI 微控制器和处理器的集成开发环境 (IDE)。 它包含一整套用于…...

Web应用框架-Django应用基础

1. 认识Django Django是一个用Python编写的开源高级Web框架&#xff0c; 旨在快速开发可维护和可扩展的Web应用程序。 使用Django框架的开发步骤&#xff1a; 1.选择合适的版本 2.安装及配置 3.生成项目结构 4.内容开发 5.迭代、上线、维护 Django官网&#xff1a; Djang…...

qt QMainWindow详解

一、概述 QMainWindow继承自QWidget&#xff0c;并提供了一个预定义的布局&#xff0c;将窗口分成了菜单栏、工具栏、状态栏和中央部件区域。这些区域共同构成了一个功能丰富的主窗口&#xff0c;使得应用程序的开发更加简单和高效。 二、QMainWindow的常用组件及功能 菜单栏&…...

第二单元历年真题整理

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 参考答案 1. A 2. A 3. A 4. D 5. D 6. D 解析&#xff1a; 栈和队列是两个不一样的结构&#xff0c;不能放在一起表示 7. B 8. C 解析&#xff1a; S --> A0 | B1 --> (S1 | 1) 0 | (S0 | 0)1 --> S10 | 10 | S…...

Ubuntu下载protobuf

1 安装依赖库 sudo apt-get install autoconf automake libtool curl make g unzip -y2 下载protobuf ProtoBuf 下载地址:https://github.com/protocolbuffers/protobuf/releases 如果要在 C 下使⽤ ProtoBuf&#xff0c;可以选择cpp.zip 其他语言选择对应的链接即可 希望支持…...

【算法优化】混合策略改进的蝴蝶优化算法

摘要 蝴蝶优化算法 (Butterfly Optimization Algorithm, BOA) 是一种新兴的智能优化算法&#xff0c;其灵感来自蝴蝶的觅食行为。本文基于经典BOA&#xff0c;通过引入混合策略进行改进&#xff0c;从而提高其在全局寻优和局部搜索中的性能。实验结果表明&#xff0c;改进的蝴…...

什么是标准差?详解

文章目录 一、什么是标准差&#xff1f;二、公式三、举个例子&#x1f330;参考 一、什么是标准差&#xff1f; 在统计学中&#xff0c;标准差&#xff08;Standard Deviation&#xff09;是用于衡量变量值围绕其平均值变化程度的指标。低标准差表示这些值通常接近平均值&…...

C++20中头文件syncstream的使用

<syncstream>是C20中新增加的头文件&#xff0c;提供了对同步输出流的支持&#xff0c;即在多个线程中可安全地进行输出操作&#xff0c;此头文件是Input/Output库的一部分。包括&#xff1a; 1.std::basic_syncbuf&#xff1a;是std::basic_streambuf的包装器(wrapper)&…...

判断特定时间点开仓的函数(编程技巧)

如何使用最新的MQL4语言创建并应用一个判断当前是否可以开启或增加交易仓位的函数。通过详细讲解函数的代码实现、核心功能及其在实际交易策略中的调用方法。 函数代码 以下是一个用MQL4编写的函数&#xff0c;用于检测在特定时间点是否可以开仓或增仓。 extern int MagicNumb…...

如何新建一个React Native的项目

要新建一个 React Native 项目&#xff0c;你可以使用 React Native 官方推荐的工具 React Native CLI 或者 Expo。两者的区别在于&#xff1a;React Native CLI 提供更多对原生代码的访问权限&#xff0c;适合构建复杂的应用&#xff1b;而 Expo 是一个开发工具链&#xff0c;…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...