Java中线程池的基本使用

参考这个课程,讲的非常详细 



27.线程池使用步骤总结_哔哩哔哩_bilibili

应用场景

商品秒杀
 

文件上传
 

订票系统


自定义线程池(让我们了解底层逻辑的)


 

构造方法


 

饱和机制
 

就是我们的队列饱和后我们该怎么处理
 

是拒绝这个任务还是啥

 

工作流程介绍




 


 


 

参数设计和分析
 

核心线程数量和任务队列长度


 


 

最大线程数和最大空闲时间



 

线程类和任务类代码实现


 


 

MyTask 是我们的线程类,我们连接了Runnable接口


 

MyWork是我们的任务执行类,连接Thread接口,里面执行run()方法


 

线程类和测试类编写
 

线程池类


 


 


 


 

提交任务,我们把任务扔到List队列里面


 


 

执行任务


 



 

测试类
 


 

逻辑
 

MyTasks提交任务给线程池MythreadPool
 

MyThreadPool再用任务类MyWorker来执行
总结

用.start()调用MyWorker类里面的run方法
 

传过去的Runnable类型,是Task任务类,我们用start()调用里面的run()方法


Java内置线程池

ExecutorService介绍
 


 


 

Executors工厂类介绍
 


 


 

newCachedThreadPool() 创建一个默认的线程池对象,里面的线程可重用,且在第一次使用时才创建
 

newCachedThreadPool(ThreadFacotry threadfactory)线程池中的所有线程都使用ThreadFacotry来创建,这样的线程无需手动启动,自动执行
 


 

newFixThreadPool() 创建一个可重用固定线程数的线程池
 

newFixThreadPool(ThreadFacotry threadfactory) 创建一个可重用固定线程数的线程池,且线程池中的所有线程都使用ThreadFacotry来创建
 


 

newSingleThreadExecutor() 创建一个使用单个worker线程的Executor,以无界队列方式来运行该线程
 

newSingleThreadExecutor(ThreadFacotry threadfactory)
 

创建一个使用单个worker线程的Executor,且线程池中的所有线程都使用ThreadFacotry来创建
 


 

newCachedThreadPool()获取ExcecutorService并且提交任务


 


 

反正就是,要执行的类,要连接Runnable接口,然后把这个连接了Runnable接口的类传给线程池
 

使用工厂类来创建线程池对象
 

control+p,观察一下形参


 

new ThreadFactory(),实现一个匿名内部类方法


 

然后我们的内部是return一个Thread
 

这里面的形参可以指定我们的线程的名称等等


无限个线程


newFixedThreadPool


 

加多了个指定线程数量


 


 

指定了3个线程,所以最多用到3个线程
 

Single,只有一个线程


 


 


 


 

shutDown和shutDownNow方法


 

shutDown,不能再提交新的任务了


 


 

shutDownNow


 

ScheduleExecutorService获取方式和常用方法介绍
 

如果我们还有其他需求
 

例如我们提交后我们想延迟一段时间
 

或者我们想每次间隔一段时间

 

允许延时任务和定时任务


 


 

延迟执行任务入门练习
 

我们的延迟任务不用start()了,用schedule(任务,延迟时间,时间的单位)


 


 

scheduleAtFixedRate()方法执行任务
 


 

如果我们用ThreadFactory()工厂创建后
 

我们用scheduleAtFixRate()来提交任务

 

scheduleWithFixedDelay()方法执行任务
 

和上面那种方法的不同,在于时间间隔的不同


 

任务执行时间不记录到间隔时间之内
 

任务结束之后才开始计算时间

 

Single线程池用这个方法调用


 



 

总结


 


Future介绍(异步计算结果)
 



 

submit()方法里面


 

形参是Callable类型
 

或者Runnable类型
 

是有返回值的
 



 

这个返回值就是我们的异步计算结果
 

有时候我们需要获取线程的计算结果来进行计算


 

方法

cancel()
 

get()
 

isCancelled()
 

isDone()
 


 

Future代码展示
 


 


 

submit()的返回值类型是Callable类型
 

也就是我们的Future类型
 

然后这个里面有我们的异步计算结果,可以根据它来进行操作
 

结束后记得关闭线程池



 


 


 

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

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

相关文章

Aria2 任意文件写入漏洞

目录 Aria2介绍漏洞描述漏洞复现 Aria2介绍 Aria2是一个在命令行下运行,多协议,多来源下载工具(HTTP / HTTPS,FTP,BitTorrent,Metalink),内建XML-RPC用户界面。Aria提供RPC服务器&a…

流媒体服务器一:使用成熟的流媒体SRS 搭建 RTMP流媒体服务器

1 安装和测试srs流媒体服务器 服务器:SRS(Simple RTMP Server,⽀持RTMP、HTTP-FLV,HLS) 推流端:ffmpeg OBS 拉流端:ffplay VLC srs播放器 1.1 安装srs流媒体服务器 官网 SRS (Simple Realtime Server) | SRS 码…

18746 逆序数

这个问题可以使用归并排序的思想来解决。在归并排序的过程中,我们可以统计逆序数的数量。当我们合并两个已经排序的数组时,如果左边的数组中的元素��于右边的数组中的元素,那么就存在逆序,逆序数的数量就是…

IEC104转MQTT网关支持MQTT对接Ignition、阿里云、华为云、亚马逊AWS、ThingsBoard、Zabbix平台助力远程管理

钡铼推出了一款专为电力系统设计的数据采集网关——IEC104转MQTT网关BE113,感兴趣的朋友接着往下看: 一、网关概述 IEC104转MQTT(Ignition)网关BE113是一款专为电力系统设计的数据采集网关,支持DL/T645和IEC104等协议的设备。上行支持MQTT协…

二、3 函数递归

自己间接或直接调用自己(可大大减少代码量) 1、举例 2、递归必须有停下来的条件 3、举例 普通求解数组长度 递归求解

Java进制,进制的转换

目录 进制 进制介绍 案例演示 进制的图示 进制的转化(基本功) 二进制转换成十进制 八进制转换成十进制 十六进制转换成十进制 十进制转换成二进制 十进制转换成八进制 十进制转换成十六进制 二进制转换成八进制 二进制转换成十六进制 …

Linux信号上

信号 概念 信号是由于进程产生,但是由内核调度传递给另一个进程: 产生信号 按键产生信号: Ctrc --> 2)SIGINT(终止/中断) Ctrz --> 20)SIGTSTOP(终端暂停) Ctr\ --> 3)SIGQUIT(退出) 系统调用产生: kill(2), raise, abort软件条件产生: 如定…

从与原始的Transformer architecture比较来理解GPT

从与原始的Transformer architecture比较来理解GPT flyfish 一、Transformer architecture 先说名词 不同的文献和资料中有不同的名字,其实是一样的意思 1 编码器-解码器多头注意力机制(Encoder-Decoder Multi-Head Attention Mechanism) …

爬虫-实战爬取虎扑ACG帖子

要求如下: 爬取虎扑步行街 ACG 版面的数据,要求使用多线程来并发爬取。范围是第一页的所有帖子,每个帖子包含标题、主题内容和第一页的所有回复内容。最后打印出爬到的所有帖子的标题。 网址是:ACG圈 - 虎扑社区。 针对上面的要求,我们进行分析: 首先是要使用多线程范…

韩顺平0基础学java——第39天

p820-841 jdbc和连接池 1.JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。 2.Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。 3.jdbc原理图 JDBC带来的好处 2.JDBC带来的…

结构体笔记

结构体 C语言中的数据类型: 基本数据类型:char/int/short/double/float/long 构造数据类型:数组,指针,结构体,共用体,枚举 概念: 结构体是用户自定义的一种数据类型&#xff0c…

《Milvus Cloud向量数据库指南》——ChatGLM:从GLM-130B到GLM-4

ChatGLM:从GLM-130B到GLM-4的跨越:智谱AI在通用人工智能领域的深度探索与实践 在人工智能的浩瀚星空中,智谱AI如同一颗璀璨的新星,以其独特的技术视角和坚定的创新步伐,在通用人工智能(AGI)的征途上留下了深刻的足迹。技术生态总监贾伟在近期的一次分享中,不仅为我们描…

20.rabbitmq插件实现延迟队列

问题 前面谈到基于死信的延迟队列,存在的问题:如果第一个消息延时时间很长,而第二个消息延时时间很短,第二个消息并不会优先得到执行。 下载插件 地址:https://github.com/rabbitmq/rabbitmq-delayed-message-excha…

49.TFT_LCD液晶屏驱动设计与验证(2)

(1)Visio视图: (2)控制模块Verilog代码: module tft_ctrl(input clk_33M ,input reset_n ,input [23:0] data_in ,output [9:0] hang…

PLSQL Developer工具查询数据,报错(动态性能表不可访问)

解决的问题: 解决方案: 在配置-首选项-选项,取消勾选“自动统计”,保存之后即可查询数据

WSL快速入门

1. WSL介绍 WSL文档地址:https://learn.microsoft.com/zh-cn/windows/wsl WSL:全称 Windows Subsystem for Linux,即windows上的Linux子系统(虚拟机工具)。是Win10推出的全新特性,可以更轻量地在Windows系统…

【网络安全】子域名模糊测试实现RCE

未经许可,不得转载。 文章目录 正文总结 正文 在之前测试一个私人项目时,我报告了admin.Target.com上的Auth Bypass漏洞,这将导致SQLI&RCE ,该漏洞在报告后仅一天就被修复。 现在重拾该应用程序,对子域进行模糊测…

RAG技术之Router

Router有什么用? 在RAG应用中,Router可以帮助我们基于用户的查询意图来决定使用何种数据类型或数据源,比如是否需要进行语义检索、是否需要进行text2sql查询,是否需要用function call来进行API调用。 Router也可以根据用户的查询…

麦田物语第十五天

系列文章目录 麦田物语第十五天 文章目录 系列文章目录一、构建游戏的时间系统二、时间系统 UI 制作总结 一、构建游戏的时间系统 在该游戏中我们要构建年月日天时分秒等时间的概念,从而实现季节的更替,昼夜的更替等(不同的季节可以播种不同…