多线程线程池

线程安全问题

            当多个线程同时操作同一个共享资源的时候,可能会出现结果不符合预期的问题

解决安全问题

方式一: 同步代码块

作用:

            把访问共享资源的核心代码给上锁,以此保证线程安全

格式:         

 synchronized(同步锁) {    

            访问共享资源的核心代码

         }

原理:

每次只允许一个线程加锁后进入,执行完毕后自动解锁,其他线程才可以进来执行。

同步锁的注意事项 

1.对于当前同时执行的线程来说,同步锁必须是同一把(同一个对象),否则会出bug

2.对于实例方法建议使用this作为锁对象 对于静态方法建议使用字节码(类名.class)对象作为锁对象 

同步代码块的同步锁对象有什么要求?     

1.对于实例方法建议使用this作为锁对象。

2.对于静态方法建议使用字节码(类名.class)对象作为锁对象。 

方式二:同步方法 

        作用:把访问共享资源的核心方法给上锁,以此保证线程安全。 

        原理:每次只能一个线程进入,执行完毕以后自动解锁,其他线程才可以进来执行。 

       同步方法底层原理 :

            1. 同步方法其实底层也是有隐式锁对象的,只是锁的范围是整个方法代码。

            2.如果方法是实例方法:同步方法默认用this作为的锁对象。

            3.如果方法是静态方法:同步方法默认用类名.class作为的锁对象。

方式三: LOCK锁 

 

 线程池

    当前创建线程的问题   

        创建和销毁线程的开销是很大的,当请求过多时,肯定会产生大量的线程出来,这样会严重影响系统的性能.

    什么是线程池

    线程池的执行流程

1. 首先判断核心线程数是否已满,如果没满,则创建一个新的核心线程来执行任务.

2.如果核心线程满了,则判断阻塞队列是否已满,如果没满,则将任务存储在这个阻塞队列

3.如果阻塞队列满了,则判断最大线程数是否已满,如果没满,则创建临时线程执行任务

4.如果最大线程数已满,则执行拒绝策略

 如何创建线程池

    ExecutorService executorService = new ThreadPoolExecutor(3,5,3000,TimeUnit.SECONDS,new ArrayBlockingQueue<>(3),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());

线程池的核心参数

 任务缓冲队列

 

任务拒绝策略 

 ExecutorService的常用方法

 Executors工具类实现线程池

 线程通信

 进程与线程

 

线程的生命周期 

1. 当new一个线程:处于新建状态

2.调用Start():处于执行状态RUNNABLE

3.抢到CPU的执行权,变为RUNNING状态

4.线程调用Sleep(1000),进入超时等待状态,Sleep方法结束回到执行状态

5.线程调用wait()方法,进入等待状态,直到notify()方法唤醒

6.直到run()方法结束,线程死亡

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

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

相关文章

202310-MetaPhlAn4安装和使用方法-Anaconda3- centos9 stream

MetaPhlAn 4是一种基于DNA序列的微生物组分析工具&#xff0c;它能够从宏基因组测序数据中识别和分离微生物的组成。以下是安装和使用MetaPhlAn 4的步骤&#xff1a; 安装MetaPhlAn 4&#xff1a; 裸机环境&#xff0c;手动安装&#xff08; 1. 安装依赖项&#xff1a; Met…

unocss和tailwindcss css原子引擎

第一种tailwindcss&#xff1a; tailwindcss官网 https://tailwindcss.com/docs/grid-column 基本介绍及优点分析 Tailwind CSS 中文文档 - 无需离开您的HTML&#xff0c;即可快速建立现代网站 PostCss 处理 Tailwind Css 基本流程 PostCSS - 是一个用 JavaScript 工具和插…

SM3加密udf

SM3加密udf maven xml <dependencies> <!-- 配置日志 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dep…

67 内网安全-域横向smbwmi明文或hash传递

#知识点1: windows2012以上版本默认关闭wdigest&#xff0c;攻击者无法从内存中获取明文密码windows2012以下版本如安装KB2871997补丁&#xff0c;同样也会导致无法获取明文密码针对以上情况&#xff0c;我们提供了4种方式解决此类问题 1.利用哈希hash传递(pth&#xff0c;ptk等…

读书笔记:c++对话系列,Visitor模式

需要在类体系中加入一个新的虚函数&#xff0c;但不允许改动。 Visitor模式&#xff0c;核心是&#xff1a;将操作作为数据对象传递给类体系预留的Accept函数。 class Personnel{ public:virtual void Pay () 0;virtual void Promote() 0;virtual void Accept(Visitor &…

缓冲channel和限制goroutine并发数

文章目录 3.7.1 用作计数信号量3.7.2 使用缓存channelsync.WaitGroup限制并发数&#xff08;类似上小节&#xff09; 要限制住goroutine的并发, 一定要阻塞住main的goroutine! 一定要阻塞住main的goroutine! 一定要阻塞住main的goroutine! 可以看最后一个例子。 由于带缓冲cha…

尚未解决:use_python()和use_virtualenv()的使用

reticulate包为Python和R之间的互操作性提供了一套全面的工具。该包包含以下功能&#xff1a; 以多种方式从R调用Python&#xff0c;包括RMarkdown、获取Python脚本、导入Python模块以及在R会话中交互使用Python。 R和Python对象之间的转换&#xff08;例如&#xff0c;R和Pan…

2023年中国调音台产业链、产量及市场规模分析[图]

调音台是一种专业音频设备&#xff0c;用于混音、处理和控制音频信号。它通常用于音乐制作、现场演出、录音室以及广播等场景中。调音台允许用户调整不同声音来源的音频信号&#xff0c;使其在混音过程中达到理想的音质和平衡。调音台按信号出来方式可分为&#xff1a;模拟式调…

UVa10976 Fractions Again?!(分数拆分)

1、题目 2、题意 输入正整数 k k k&#xff0c;找到所有正整数 x ≥ y x \ge y x≥y&#xff0c;使得 1 k 1 x 1 y \frac{1}{k} \frac{1}{x} \frac{1}{y} k1​x1​y1​。 3、分析 既然要求找出所有的 x , y x,y x,y&#xff0c;枚举对象自然是 x , y x,y x,y了。可…

LeetCode每日一题——2558. Take Gifts From the Richest Pile

文章目录 一、题目二、题解 一、题目 2558. Take Gifts From the Richest Pile You are given an integer array gifts denoting the number of gifts in various piles. Every second, you do the following: Choose the pile with the maximum number of gifts. If there …

名词解释 MongoDB

MongoDB 是一个面向文档的数据库管理系统&#xff0c;它不使用传统的表格结构&#xff0c;而是将数据组织成类似文档的形式&#xff0c;通常使用JSON格式。 文档数据库&#xff1a;数据以文档的形式存储&#xff0c;每个文档可以包含不同的字段&#xff0c;就像一个文件可以包…

day36(http协议 服务器软件的使用 PHP的简单了解 前后端交互 ajax 同步和异步)

一.http协议 1.http1&#xff09;前后端交互&#xff1a;前端发数据给后端&#xff0c;后端获取前端数据&#xff0c;经过解析&#xff0c;返回需要的数据2&#xff09;数据如何交互&#xff1f;请求响应3&#xff09;概念&#xff1a;http&#xff08;超文本传输协议&#xf…

C# 基于腾讯云人脸核身和百度云证件识别技术相结合的 API 实现

目录 腾讯云人脸核身技术 Craneoffice.net 采用的识别方式 1、活体人脸核身(权威库)&#xff1a; 2、活体人脸比对&#xff1a; 3、照片人脸核身(权威库)&#xff1a; 调用成本 百度云身份证识别 调用成本 相关结合点 核心代码 实现调用人脸核身API的示例 实现调用身…

拓世大模型 | 立足行业所需,发力终端,缔造智能无限可能

蒸汽机的发明为人类工业革命揭开序幕&#xff0c;引领了近现代产业变革。众所周知&#xff0c;而今AI技术的革命性突破&#xff0c;站在了时代舞台的中心&#xff0c;特别是大模型的崛起&#xff0c;无疑是第四次产业革命的焦点&#xff0c;它的地位可与当年的“蒸汽机”相提并…

性能诊断工具对比+Prometheus(普罗米修斯)监控系统学习

【精选】Prometheus&#xff08;普罗米修斯&#xff09;监控系统_普罗米修斯监控_愿许浪尽天涯的博客-CSDN博客 Java 性能诊断工具 &#x1f3cd;️... Java自带的工具 JConsoleJVisualVMjmapjstackjcmd单机图形化诊断工具 YourKitJProfilerVisualVMArthas分布式诊断工具 Zipk…

Jenkins发布windows服务器jar

一、背景 之前是linux服务器部署的项目&#xff0c;现在转为windows服务器部署。jenkins和git都已经部署好了。所以本文只会重点讲Jenkins调用windows服务器bat命令及bat命令的编写概况。 二、详情操作 1、Jenkins调用windows bat文件 首先在Jenkins项目配置"高级项目选…

【git命令】删除分支

1. 删除本地分支 使用git branch -d命令删除本地分支 git branch -d branch_name其中&#xff0c;branch_name是分支名。如果有未合并的更改&#xff0c;Git会阻止你删除分支。 使用git branch -D命令强制删除本地分支 git branch -D branch_name这个命令会强制删除分支&am…

JAVA排序

目录 再看各种排序前我们先了解一下什么叫 稳定性 插入排序&#xff1a; 希尔排序:(插入排序的优化) 测试插入排序和希尔排序(插入排序的优化)排序时间对比 选择排序: 选择排序的优化: 正确的 选择排序优化 快速排序(挖坑法:未优化) 快速排序的优化1 快速排序优化2 优化快速排序…

mysql4

创建表并插入数据&#xff1a; 字段名 数据类型 主键 外键 非空 唯一 自增 id INT 是 否 是 是 否 primary key name VARCHAR(50) 否 否 是 否 否 not null glass VARCHAR(50) 否 否 是 否 否 not nullsch 表内容 id name glass 1 xiaommg glass 1 2 xiaojun …

3.无重复字符的最长子串

​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 滑动窗口。使用哈希集合来记录窗口中的字符。当窗口右边界不为字符串右边界时&#xff0c;窗口右边界右移一位&#…