JUC常见类

White graces:个人主页

🙉专栏推荐:Java入门知识🙉

🙉 内容推荐:Java锁的策略🙉

🐹今日诗词:苟利国家生死以,岂因祸福避趋之🐹


⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏

⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏


目录

Callable接口

ReentrantLock

ReentrantLock和synchronized的区别

信号量

二元信号量

CountDownLatch

线程安全的集合类

多线程使用ArrayList

CopyOnWriteArrayList(重点)

多线程使用队列

多线程使用哈希表(重点)

        美图分享


JUC是java.util.concurrent包的缩写, 这个包里面存放着多线程相关的类

Callable接口

和Runnable类似, 实现Callable接口, 可以创建一个线程任务, 配合Thread类可以把这个任务放到线程中运行

Callable和Runnable的区别: Runnable没有返回值, Callable有返回值

Callable的优势: 代码耦合性比Runnable更低(所以以后就用Callable吧,装逼且优雅)

ReentrantLock

ReentrantLock叫做: 可重入互斥锁

特点: 将加锁操作和解锁操作分开了

知道了ReentrantLock的特点了, 我们来看看他和Synchronized的区别吧

ReentrantLock和synchronized的区别

1. ReentrantLock提供了公平锁的实现

   synchronized只是一个非公平锁

2. ReentrantLock提供了trylock方法, 给加锁操作提供了更多的可能性

trylock作用: 如果线程没有获取到锁, 不会阻塞等待, 而是返回失败

而synchronizd是没有获取到锁就会死等(专一)

trylock还有带有超时时间的版本, 这段时间内没有获取到锁就会返回失败

3. synchronized搭配wait(等待), notify(通知)机制

而ReentrantLock通过Condition类来实现等待通知机制, 且功能比wait, notify更强

wait, notify是随机唤醒一个线程, 而Condition可以唤醒指定线程

信号量

Semaphore: 信号量

概念: 信号量就是一个计数器, 用于描述可用资源的个数

举例: 教室里空闲座位的个数, 这个个数就是信号量

围绕信号量有两个操作: P操作和V操作

P操作是申请资源, V操作是释放资源

PV是荷兰语的简写, 这个东西是一个荷兰人发明

P操作对应acquire()方法

V操作对应release()方法

二元信号量

如果可用资源数为1, 此时的信号量相当于一把锁

CountDownLatch

作用: 同时等待N个线程结束

与join()方法的区别: join是等待一个线程执行完毕并继续执行,CountDownLatch是同时等待N个线程执行完毕后才会继续执行下一步

线程安全的集合类

我们学过的大部分集合类都是不安全的

不安全的集合类: ArrayList, Queue , LinkedList, HashMap(HashTable对哈希表加了锁)...

带锁的集合类: Vector(自带synchronized), Stack(继承自Vector), HashTable...

加锁的集合类大部分情况下是线程安全的, 同时标准库也提供了方法, 用于加锁线程不安全的类或者接口, 我们来看看吧!

多线程使用ArrayList

 ArrayList使用Collection.synchronizedList()对List类型和子类的对象进行加锁

CopyOnWriteArrayList(重点)

多线程中还有一种方法解决ArrayList不安全的做法,使用CopyOnWriteArrayList

很多场景经常用到, 电影画面渲染, 电影是一帧一帧的, 画面并不是在原有的基础上修改

而是播放的时候用额外的空间生成下一幅图片,然后将引用指向当前播放的图片的引用,实现了画面切换, 直接修改画面会有撕裂感

多线程使用队列

这个直接使用阻塞队列即可(BlockingQueue)

多线程使用哈希表(重点)

HashMap是不安全的

HashTable在HashMap的基础上加了synchronized, 虽然是安全的,但是不推荐使用,因为有个更牛逼的东西

ConcurrentHashMap: HasTable是一个全局锁(一把锁), 我们知道哈希表是数组加链表的结构

1. ConcurrentHashMap使用锁桶(一堆锁)的方式加锁, 对每个链表进行加锁, 多把锁有效降低了锁冲突的概率

2. 普通哈希表涉及到多线程修改同一个变量会出现问题,这时候就要解锁解决, 但是ConcurrentHashMap引入了CAS来避免加锁操作了

3. ConcurrentHashMap还对扩容进行了优化, 普通哈希表到达哈希冲突的阈值后会扩容

将所有元素重新put到表中, 要put很多次,把数据一下搬完 导致这一时会比较慢

但是ConcurrentHashMap扩容会使用两份空间一份之前的,一份扩容后的, 接下来对哈希表进行操作时, 它会在后面将一部分数据搬运到新的空间, 每次搬一点, 而不是一下搬完

举个例子: 像学习一样, 每天学一点,时间长了就成大牛, 而不是期末突击一下

美图分享

✨🎆谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"🎆✨🎄

⭐️点赞收藏加关注,学习知识不迷路⭐️

🎉✔️💪🎉✔️💪🎉✔️💪🎉✔️💪🎉

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打造高效微服务的最佳实践

原文: 7 Best Practices for Building Effective Microservices Marc-Olivier Jodoin Unsplash 微服务架构是软件开发领域的热门话题,这一话题如此值得关注是因为这种架构模式几乎解决了单体软件系统的所有重要痛点。快速扩容、减少停机时间、高可用性是微服务的主要…

LIMS实验室管理系统品牌市场占有率 国内LIMS系统推荐

LIMS(Laboratory Information Management System)即实验室信息管理系统,是一种以数据库为核心的信息化技术与实验室管理需求相结合的信息化管理工具。以下是根据搜索结果整理的一些LIMS系统厂商: 国外厂商 Labware 作为国外实验室领域的两大巨头之一&a…

无法删除dll文件

碰到xxxxxx.dll文件无法删除不要慌! 通过Tasklist /m dll文件名称 去查看它和哪个系统文件绑定运行,发现是explorer.exe。 我们如果直接通过del命令【当然需要在该dll文件所在的路径中】。发现拒绝访问 我们需要在任务管理器中,将资源管理器…

TLBCache的联合设计

PIPT 在使用虚拟存储器的系统中,仍旧可以使用物理Cache,这是最保守的一种做法 处理器送出的虚拟地址(VA)会首先被TLB转换为对应的物理地址(PA),然后使用物理地址来寻址Cache,此时就像是没有使用虚拟存储器一样,直接使用了物理Cache,并且使用物理地址的一部分作为 Ta…

民国漫画杂志《时代漫画》第33期.PDF

时代漫画33.PDF: https://url03.ctfile.com/f/1779803-1248635648-d8235b?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

C#中的实体属性详解与示例

文章目录 实体属性的定义实体属性的访问实体属性的示例总结 在C#中,实体属性是面向对象编程的重要组成部分。实体属性允许我们定义对象的特征和行为,并提供了一种方式来访问和管理这些特征。通过实体属性,我们可以封装对象的状态,…

GPT-4o:免费且更快的模型

OpenAI GPT-4o 公告 OpenAI 推出了增强版 GPT-4 模型——OpenAI GPT-4o,用于支持 ChatGPT。首席技术官 Mira Murati 表示,更新后的模型速度更快,并在文本、视觉和音频处理方面有了显著提升。GPT-4o 将免费向所有用户开放,付费用户…

Rainbond 携手 TOPIAM 打造企业级云原生身份管控新体验

TOPIAM 企业数字身份管控平台, 是一个开源的IDaas/IAM平台、用于管理账号、权限、身份认证、应用访问,帮助整合部署在本地或云端的内部办公系统、业务系统及三方 SaaS 系统的所有身份,实现一个账号打通所有应用的服务。 传统企业 IT 采用烟囱…

【数据分享】中国科技统计年鉴Excel版(1991-2023年)

大家好!今天我要向大家介绍一份重要的中国科技统计数据资源——《中国科技统计年鉴》。这份年鉴涵盖了从1991年到2023年中国科技统计全面数据,并提供限时免费下载。 数据介绍 在数字化时代的浪潮中,数据的重要性日益凸显。对于研究人员、政…

AI 赋能前端 -- 文本内容概要生成

幸福不在于你获得了什么,而在于你比他人多获得了什么 是比较出来的 大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder 此篇文章所涉及到的技术有 OpenAILangChainRust/WebAssemblyWeb Workerreact+ts+vite配置环境变量(env)因为,行文字数所限,有些概…

5. MySQL运算符和函数

文章目录 【 1. 算术运算符 】【 2. 逻辑运算符 】2.1 逻辑非 (NOT 或者 !)2.2 逻辑与运算符 (AND 或者 &&)2.3 逻辑或 (OR 或者 ||)2.4 异或运算 (XOR) 【 3. 比较运算符 】3.1 等于 3.2 安全等于运算符 <>3.3 不等于运算符 (<> 或者 !)3.4 小于等于运算符…

【观察】数字化生存时代已来临,能源转型如何实现“再升级”?

20多年前&#xff0c;尼古拉斯尼葛洛庞帝在《数字化生存》一书中预言&#xff1a;“数字化生存是现代社会中以新技术为基础的新的生存方式。” 随着数字经济的蓬勃发展&#xff0c;尼葛洛庞帝的预言逐渐被验证。今天&#xff0c;新技术带来的数字化和智能化正全方位影响着经济…

计算机网络-BGP路由通告原则

前面一章我们学习了BGP的路由产生方式以及查看路由表信息。BGP自身并不会发现并计算产生路由。BGP通过network、import-route、aggregate聚合方式生成BGP路由后&#xff0c;通过Update报文将BGP路由传递给对等体。那BGP向邻居通告路由时遵循哪些原则呢&#xff1f; BGP通告遵循…

521源码-源码论坛-宝塔面板操作日志是存放在哪里的? 如何删除部分日志记录

我们帮别人搭建或者登录了&#xff08;不是自己权属的宝塔面板&#xff09;&#xff0c;会留下登录及操作的日志&#xff0c;我们不想留下这些操作日志&#xff0c;可以通过下面的方法处理掉&#xff0c;以达到无痕迹访问操作的目的&#xff1a; 如图所示的面板操作日志&#…

计算机网络——如何保证 TCP 传输的可靠性

TCP 是传输层上的协议&#xff0c;它是可靠的&#xff0c;面向连接的。 概括 1. 设置传输格式&#xff0c;包括分为 TCP 段、使用校验和、使用序列号 2. 数据丢失之后的重传&#xff0c;超时重传、快速重传、SACK 选择确认、D-SACK 重复选择确认 3. 流量控制&#xff0c;控…

【学习笔记】数据结构(一)

基本概念和术语 &#x1f449;数据&#xff1a;所有能被输入到计算机中&#xff0c;且被计算机处理的符号的集合&#xff1b; 是计算机操作对象的总称&#xff1b;是计算机处理信息的载体&#xff1b;是信息的某一种特定的符号表示形式包括数值型数据、非数值型数据 &#x1…

变种水仙花

变种水仙花 题干要求&#xff1a; 变种水仙花数 - Lily Number&#xff1a;把任意的数字&#xff0c;从中间拆分成两个数字&#xff0c;比如1461 可以拆分成&#xff08;1和461&#xff09;,&#xff08;14和61&#xff09;,&#xff08;146和1),如果所有拆分后的乘积之和等于…

干Java的有4年的工作经验;想转行做labview能行吗?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;bVIEW和Java都是软件工具&a…

Golang | Leetcode Golang题解之第120题三角形最小路径和

题目&#xff1a; 题解&#xff1a; func minimumTotal(triangle [][]int) int {n : len(triangle)f : make([]int, n)f[0] triangle[0][0]for i : 1; i < n; i {f[i] f[i - 1] triangle[i][i]for j : i - 1; j > 0; j-- {f[j] min(f[j - 1], f[j]) triangle[i][j]…

【新能源大巴BMS结构与乘用车的区别】

新能源大巴BMS结构与乘用车的区别 这篇文章主要介绍新能源大巴的电池和BMS的结构与乘用车的区别。 主要有&#xff0c;新能源大巴行业、新能源电池系统结构和新能源大巴的BMS系统。 第一部分 新能源大巴行业 其实数数全球的商用车(大巴卡车)&#xff0c;大致的方向还是沿着就…