当前位置:网站首页>线程应用实例
线程应用实例
2022-07-02 18:01:00 【桑英豪】
一.等待超时模式
场景:调用一个方法时等待一段时间,如果该方法能够在给定的时间之内得到结果,将立即返回,反之,如果超时返回默认结果。
二.数据库连接池
连接池的定义:构造函数初始化连接的最大上限,通过一个双向队列来维护连接,调用方需要先调用fetchConnection(long)方法来指定多少毫秒内超时获取连接,当连接使用完成后,需要调用releaseConnection(Connection)方法将连接放回连接池。
三.线程池技术
3.1线程池的作用
面对成千上万的任务递交进服务器时,如果还是采用一个任务一个线程的方式,那么将会创建数以万记的线程,这不是一个好的选择,因为这会使操作系统频繁的进行线程上下文切换,无故增加系统的负载,而线程的创建和消亡都是需要耗费系统资源的,也无疑浪费了系统资源。线程池很好的解决了这个问题,它预先创建了若干的线程,并且不能由用户直接对线程的创建进行控制
3.2线程池的优势
- 降低资源消耗
- 提高响应速度
- 提高线程的可管理性
3.3 线程池中的几个参数
1: 核心线程数(corePoolSize)
核心线程数的设计需要依据任务的处理时间和每秒产生的任务数量来确定,例如:执行一个任务需要0.1秒,系统百分之80的时间每秒都会产生100个任务,那么要想在1秒内处理完这100个任务,就需要10个线程,此时我们就可以设计核心线程数为10;当然实际情况不可能这么平均,所以我们一般按照8020原则设计即可,既按照百分之80的情况设计核心线程数,剩下的百分之20可以利用最大线程数处理;
2:任务队列长度(workQueue)
任务队列长度一般设计为:核心线程数/单个任务执行时间*2即可;例如上面的场景中,核心线程数设计为10,单个任务执行时间为0.1秒,则队列长度可以设计为200;
3:最大线程数(maximumPoolSize)
最大线程数的设计除了需要参照核心线程数的条件外,还需要参照系统每秒产生的最大任务数决定:例如:上述环境中,如果系统每秒最大产生的任务是1000个,那么,最大线程数=(最大任务数-任务队列长度)*单个任务执行时间;既: 最大线程数=(1000-200)*0.1=80个;
4:最大空闲时间(keepAliveTime)
这个参数的设计完全参考系统运行环境和硬件压力设定,没有固定的参考值,用户可以根据经验和系统产生任务的时间间隔合理设置一个值即可;
3.4线程池工作流程
3.5Executor和Executors的区别
Executor 接口对象能执行我们的线程任务;
Executors 工具类的不同方法按照我们的需求创建了不同的线程池,来满足业务的需求。
ExecutorService 接口继承了Executor接口并进行了扩展,提供了更多的方法,我们能够获得任务执行的状态并且可以获取任务的返回值。
3.6你知道怎么创建线程池吗?
ThreadPoolExecutor
边栏推荐
- FastDFS安装
- Emmet基础语法
- ICDE 2023|TKDE Poster Session(CFP)
- STM32G0 USB DFU 升级校验出错-2
- 中国信通院《数据安全产品与服务图谱》,美创科技实现四大板块全覆盖
- 二进制操作
- [100 cases of JVM tuning practice] 02 - five cases of virtual machine stack and local method stack tuning
- Markdown basic grammar
- R language uses Cox of epidisplay package Display function obtains the summary statistical information of Cox regression model (risk rate HR, adjusted risk rate and its confidence interval, P value of
- #gStore-weekly | gStore源码解析(四):安全机制之黑白名单配置解析
猜你喜欢

性能测试如何创造业务价值

Thoroughly understand the point cloud processing tutorial based on open3d!

Installation of thingsboard, an open source IOT platform

教程篇(5.0) 10. 故障排除 * FortiEDR * Fortinet 网络安全专家 NSE 5

Mini Golf Course: a good place for leisure and tourism in London

开发固定资产管理系统,开发固定资产管理系统用什么语音

Deep learning mathematics foundation

中国信通院《数据安全产品与服务图谱》,美创科技实现四大板块全覆盖
![[fluent] dart data type (VaR data type | object data type)](/img/1b/fe2529af5f6663fad1fb7861f14ab5.jpg)
[fluent] dart data type (VaR data type | object data type)

第一次去曼谷旅游怎么玩?这份省钱攻略请收好
随机推荐
高级性能测试系列《24. 通过jdbc执行sql脚本》
R language ggplot2 visualization: visualize the line chart and add customized X-axis label information to the line chart using labs function
The difference between SLC, MLC, TLC and QLC NAND SSD: which is better?
[论文阅读] CA-Net: Leveraging Contextual Features for Lung Cancer Prediction
[100 cases of JVM tuning practice] 03 -- four cases of JVM heap tuning
数字滚动带动画
SQL training 2
27: Chapter 3: develop Passport Service: 10: [registration / login] interface: after the registration / login is OK, save the user session information (uid, utoken) to redis and cookies; (one main poi
Progress-进度条
When converting from list to map, if a certain attribute may cause key duplication and exceptions, you can set the way to deal with this duplication
中国信通院《数据安全产品与服务图谱》,美创科技实现四大板块全覆盖
在纽约寻找童真——新泽西州乐高乐园探索中心的美好一天
UML 类图
Use MNIST in tensorflow 2_ 784 data set for handwritten digit recognition
Mysql高级篇学习总结8:InnoDB数据存储结构页的概述、页的内部结构、行格式
Yolov3 trains its own data set to generate train txt
Tutorial (5.0) 09 Restful API * fortiedr * Fortinet network security expert NSE 5
Page title component
[test development] software testing - concept
消息队列消息丢失和消息重复发送的处理策略