【Java】线程池的简单实用

1、什么是线程池

Java当中,为了规避频繁创建调度进程的开销,我们引入了线程。但是如果进一步提高创建销毁频率,线程的开销也不容忽视。

对此我们有两个解决方案

 · 协程(轻量级线程):相比线程,把系统调度的过程省略了。

 · 线程池:在使用第一个线程的时候,提前把其余线程创建好。后续如果想使用新的线程,不必重新创建,可以直接用。

(使用池中的线程比创建线程更高效的原因是:创建线程涉及到内核态操作(操作系统内核会给所有线程提供服务),过程是不可控的)

在Java当中,我们更常用的是线程池方案
线程池的优点有

降低资源消耗,复用已创建的线程来降低创建和销毁线程的消耗。
提高响应速度,任务到达时,可以不需要等待线程的创建立即执行。
提高线程的可管理性,使用线程池能够统一的分配、调优和监控。

2、创建线程池的方法 

(1)newCachedThreadPool()方法

我们把newCachedThreadPool()和下面提到的几种方法称之为工厂方法,对象并不是调用new来实现的

ExecutorService service = Executors.newCachedThreadPool();

newCachedThreadPool()创建线程池的线程数目是可以动态适应的。随着往线程池里添加任务,线程会被自动创建出来;任务执行完后,线程也不会立刻销毁,而是保留一段时间,方便后续调用

(2) newFixedThreadPool()方法

ExecutorService service = Executors.newFixedThreadPool(4);

newFixedThreadPool()方法创建的线程数量是固定的,上面代码中的4就是线程数

(3)newSingleThreadExecutor()方法

ExecutorService service = Executors.newSingleThreadExecutor();

该方法只能创建单个线程

(4)newScheduledThreadPool()方法

ExecutorService service = Executors.newScheduledThreadPool(4);

该方法创建的线程池类似于定时器,由多个线程执行时间到了的任务

什么是定时器?

3、添加任务

在创建线程池后,我们就应该接着添加任务

添加任务所用的方法是submit()方法

service.submit(new Runnable() {@Overridepublic void run() {System.out.println("111");}});

submit()的参数即重写run方法的匿名内部类

在添加任务后,就可以直接运行程序啦!

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class demo1 {public static void main(String[] args) {ExecutorService service = Executors.newCachedThreadPool();service.submit(new Runnable() {@Overridepublic void run() {System.out.println("111");}});}
}

 运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/171985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据平台/大数据技术与原理-实验报告--部署全分布模式Hadoop集群

实验名称 部署全分布模式Hadoop集群 实验性质 (必修、选修) 必修 实验类型(验证、设计、创新、综合) 综合 实验课时 2 实验日期 2023.10.16-2023.10.20 实验仪器设备以及实验软硬件要求 专业实验室(配有cen…

HarmonyOS应用开发者高级认证(题库)

判断题 每一个自定义组件都有自己的生命周期 正确Worker线程不支持UI操作 正确首选项preferences是以key-value形式存储数据,其中key是可以重复的。 错误HarmonyOS应用可以兼容OpenHarmony生态 正确使用端云一体化开发,无需自己搭建服务器 正确只要…

6.4 Windows驱动开发:内核枚举DpcTimer定时器

在操作系统内核中,DPC(Deferred Procedure Call)是一种延迟执行的过程调用机制,用于在中断服务例程(ISR)的上下文之外执行一些工作。DPC定时器是基于DPC机制的一种定时执行任务的方式。 DPC定时器的主要特…

Windows 10 使用命令行连接 WiFi

背景 希望给远程控制的电脑更换所连 WiFi,通过右下角任务栏连接新 WiFi 时,对新 WiFi 点击连接以后,已连接的 WiFi 立即断开,但此时还没有输入新 WiFi 密码。 机器在被远程控制,网断了,没有机会输入密码或…

Namecheap怎么样,Namecheap优惠码以及注册手把手教程

Namecheap 是一家成熟的服务器域名托管公司,可以为合适的客户提供良好的解决方案。这些优点和缺点应该让您清楚地了解您的期望,以便您知道这是否是您网站的正确选择。 Namecheap怎么样? 已成立的公司: Namecheap 已经营 20 多年…

【代码随想录刷题】Day18 二叉树05------延伸题目练习

文章目录 1.【113】路径总和II1.1 题目描述1.2 解题思路1.3 java代码实现 2.【105】从前序与中序遍历序列构造二叉树2.1 题目描述2.2 java代码实现 【113】路径总和II 【105】从前序与中序遍历序列构造二叉树 1.【113】路径总和II 1.1 题目描述 给你二叉树的根节点 root 和一…

Vscode工具使用指南

通用 快捷键文件 / 编辑查找 / 替换窗口插件主题 连接linux 快捷键 文件 / 编辑 新建文件:CtrlN放大或缩小:Ctrl /-代码行缩进,展开:Ctrl[ 和 Ctrl]在当前行下方插入一行:CtrlEnter在当前行上方插入一行:…

EMQX-5.3.1单机集群部署并基于Nginx实现负载均衡

本例单机集群部署使用三个节点,分别为node1、node2、node3 一、安装与配置 1 创建数据目录 mkdir -p node1/data node1/logs mkdir -p node2/data node2/logs mkdir -p mode3/data node3/logs 2 数据目录授权 chown 1000 node1/ node2/ node3/ chown 1000 n…

RabbitMQ 安装教程(CentOS 7)

RabbitMQ 安装教程(CentOS 7) 在/usr/local/下分别创建erlang和rabbitmq两个文件夹: cd /usr/local mkdir erlang mkdir rabbitmq分别上传两个安装包并解压(注意版本)必须先下载安装erlang语言环境: cd …

jsp生成验证码的代码

效果图&#xff1a; loginProcess.jsp <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><% String captcharequest.getParameter("captcha");%><% String captcha_session(String)s…

MySQL基本SQL语句(上)

MySQL基本SQL语句&#xff08;上&#xff09; 一、客户端工具的使用 1、客户端工具mysql使用 mysql: mysql命令行工具&#xff0c;一般用来连接访问mysql数据库 选项说明-u, --username指定登录用户名-p, --password指定登录密码(注意是小写p),一定要放到最后面-h, --hostn…

HDFS JAVA API的应用

首先把hadoop服务起来 1. (简答题) 使用HDFS 的JAVA API 进行编程&#xff1a; &#xff08;1&#xff09;获取自己HDFS集群下的所有文件和目录&#xff1b; //获取自己HDFS集群下的所有文件和目录&#xff1b;import org.apache.hadoop.conf.Configuration; import org.apa…

究竟FactoryBean是什么?深入理解Spring的工厂神器

文章目录 前言什么是FactoryBean&#xff1f;如何使用FactoryBean&#xff1f;我们常见的FactoryBeanBeanFactory 和 FactoryBean&#xff1f;FactoryBean后续&#xff1f;MapperFactoryBean 前言 在Spring框架中&#xff0c;bean的创建通常交由Spring IoC容器负责&#xff0c…

【从亮机卡开始的云炼丹】环境配置记录debug

要更改Anaconda环境的默认路径到D盘 可以按照以下步骤操作&#xff1a; 1. 打开Anaconda Prompt&#xff08;或者命令行窗口&#xff09;。 2. 输入以下命令更改Anaconda环境的默认路径到D盘&#xff1a; conda config --set envs_dirs D:\Anaconda\envs 这将把Anaconda环境…

汽车租聘管理与推荐系统Python+Django网页界面+协同过滤推荐算法

一、介绍 汽车租聘管理与推荐系统。本系统使用Python作为主要编程语言&#xff0c;前端采用HTML、CSS、BootStrap等技术搭建前端界面&#xff0c;后端采用Django框架处理用户的请求。创新点&#xff1a;使用协同过滤推荐算法实现对当前用户个性化推荐。 其主要功能如下&#x…

机器学习比较 - 基于OpenCV进行图像向量的提取

一、简述 在将图像输入机器学习算法之前,通常对图像执行的预处理步骤之一是将它们转换为特征向量。将图像转换为特征向量有几个优点,可以使机器学习算法更加高效的运行。 在将图像转换为特征向量的不同技术中,经常与不同机器学习算法结合使用的两种最流行的技术是定向梯度直…

设计模式—依赖倒置原则(DIP)

1.概念 依赖倒置原则&#xff08;Dependence Inversion Principle&#xff09;是程序要依赖于抽象接口&#xff0c;不要依赖于具体实现。简单的说就是要求对抽象进行编程&#xff0c;不要对实现进行编程&#xff0c;这样就降低了客户与实现模块间的耦合。 通俗的讲&#xff1…

1-Python与设计模式--单例模式

1-Python与设计模式–单例模式 一、总线 总线是计算机各种功能部件或者设备之间传送数据、控制信号等信息的公共通信解决方案之一。 现假设有如下场景&#xff1a;某中央处理器&#xff08;CPU&#xff09;通过某种协议总线与一个信号灯相连&#xff0c;信号灯有64种颜色可以…

SpringBoot校验List失效解决方法

文章目录 SpringBoot校验List失效解决方法附&#xff1a;校验基本数据类型和String类型的方法参数时也需要在类上加Validated SpringBoot校验List失效解决方法 失效场景示例代码&#xff1a; RestController RequestMapping("/v1/jx/flowSummary") Slf4j public cl…

【React】打包优化-配置CDN

CDN 是一种内容分发网络服务&#xff0c;当用户请求网站内容时&#xff0c;由离用户最近的服务器将缓存的资源内容传递给用户。 哪些资源可以放到CDN服务器&#xff1f;&#xff08;比如react、 react-dom&#xff09; 体积较大&#xff0c;需要利用CDN文件在浏览器的缓存特性…