JavaEE(系列15) -- 多线程(JUC中常见的类)

news2024/11/25 11:43:48

JUC----- java.util.concurrent(并发)

1. ReentrantLock

1. 可重入互斥锁. 和 synchronized 定位类似, 都是用来实现互斥效果, 保证线程安全.

 

2. ReentrantLock 也是可重入锁. "Reentrant" 这个单词的原意就是 "可重入".

1. ReentrantLock 的用法:

  • lock(): 加锁, 如果获取不到锁就死等.
  • trylock(超时时间): 加锁, 如果获取不到锁, 等待一定的时间之后就放弃加锁.
  • unlock(): 解锁
ReentrantLock lock = new ReentrantLock();
-----------------------------------------
lock.lock(); 
try {  
// working  
} finally {  
lock.unlock()  
} 

 

 2. ReentrantLock 和 synchronized 的区别:

  • synchronized 是一个关键字, 是 JVM 内部实现的(大概率是基于 C++ 实现). ReentrantLock 是标准库的一个类, 在 JVM 外实现的(基于 Java 实现).
  • synchronized 使用时不需要手动释放锁. ReentrantLock 使用时需要手动释放. 使用起来更灵活,但是也容易遗漏 unlock.
  • synchronized 在申请锁失败时, 会死等. ReentrantLock 可以通过 trylock 的方式等待一段时间就放弃.
  • synchronized 是非公平锁, ReentrantLock 默认是非公平锁. 可以通过构造方法传入一个 true 开启公平锁模式.

 

 

 3. 如何选择使用哪个锁?

  • 锁竞争不激烈的时候, 使用 synchronized, 效率更高, 自动释放更方便.
  • 锁竞争激烈的时候, 使用 ReentrantLock, 搭配 trylock 更灵活控制加锁的行为, 而不是死等.
  • 如果需要使用公平锁, 使用 ReentrantLock.

2. 原子类 

原子类内部用的是 CAS 实现,所以性能要比加锁实现 i++ 高很多。原子类有以下几个

  • AtomicBoolean: AtomicBoolean是通过原子方式更新 boolean 值。AtomicBoolean用于诸如原子更新标志之类的应用程序,但是不能替换boolean类使用。
  • AtomicInteger:AtomicInteger 是一个支持原子操作的 Integer 类,它提供了原子自增方法、原子自减方法以及原子赋值方法等。
  • AtomicIntegerArray:.AtomicIntegerArray表示一个int数组。AtomicIntegerArray中的int元素可以原子更新。AtomicIntegerArray还支持比较并交换功能。
  • AtomicLong:AtomicLong是作用是对长整形进行原子操作。
  • AtomicReference:AtomicReference类提供了对象引用的非阻塞原子性读写操作,并且提供了其他一些高级的用法
  • AtomicStampedReference:解决ABA问题引进版本号.

 以 AtomicInteger 举例,常见方法有

 

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

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

相关文章

【花雕学AI】微软 Bing 图像魔法师:让你的描述变成图像,让你的图像变成现实

你有没有想过,如果你能够用语言来创造图像,那该有多么神奇和有趣?你有没有想过,如果你能够看到你想象中的图像,那该有多么震撼和美妙?现在,这一切都可以实现了,因为微软 Bing 图像魔…

NetApp EF 系列全闪存阵列——性能极佳,性价比优势突出

NetApp EF 系列全闪存阵列——性能极佳,性价比优势突出 如果您需要为实时分析、HPC 和数据库等性能敏感型工作负载提供强劲动力,NetApp EF 系列全闪存阵列的性价比优势不言自明。其可为要求最苛刻的应用程序提供微秒级响应,最大限度地延长正…

电源方案对比

电源 1.方案选择:1 LM2596 2 MP1584 3:TPS54301LM25962.MP1584:3.TPS5430 2.1输出2A电流的纹波2.2 输出3A电流的纹波3.动态响应4.发热5.电源转换效率6.综合指标reference 1.方案选择:1 LM2596 2 MP1584 3:TPS5430 1LM…

Unity之ShaderGraph节点介绍 Channel通道

目录 Channel(通道)  1、Combine(合并)  2、Flip(反转)  3、Split(拆分)  4、Swizzle(通道调配) Channel(通道) 1、Combine&am…

win可以上网,但是右下方显示“无internet链接“

使用了下面链接的方法,成功解决 Win10可以联网但右下角显示无法连接到Internet怎办 首先,打开控制面板(control),右上角,将查看方式切换为小图标 调整计算机的设置下,找到并点击网络和共享中心 网络和共享中心窗口&a…

即时通讯软件(企业IM)对企业的作用

随着网络时代的来临,即时通讯软件也开始逐渐在企业中流行起来,甚至很多公司都已经将即时通讯软件作为内部沟通的主要工具,那么这种情况下,即时通讯软件对企业究竟有什么作用呢? 首先,即时通讯软件对于企业内…

20年前,微软给金山那刀,现今一举将WPS推上领奖台,WPS,赢了

WPS,赢了 正如姚冬(金山办公副总裁)所说: 文本的命令行到图形界面的那次,改变整个人机交互的方式,我们公司历史上最大的一次危机也是那一次, 但我们依然挺过来了,我们相信这次技术浪…

走进Linux世界,学习Linux系统的必备指南

随着计算机技术的不断发展,Linux操作系统已成为IT行业中备受关注的操作系统之一。Linux以其安全性、稳定性和开放性,受到了广泛的认可和欢迎。学习Linux系统对于IT行业的从业者来说是非常重要的。但是,对于初学者来说,学习Linux可…

CANopenNode Master 配置

文章目录 CANopenNode 简介CANopenNode 主栈SDO ClientPDO 通讯参数RPDO 通讯参数RPDO 通信参数设置实例TPDO 通讯参数TPDO 通信参数设置实例 PDO 映射参数RPDO 映射参数设置实例TPDO 映射参数设置实例 CANopenNode 简介 CANopenNode 是一个开源的免费的开源 CANopen 协议栈。…

【谷粒商城笔记】1.基于docker的mysql、redis环境配置

0.系统 宝塔 v7.5.1 Centos v8.2 1. 安装Docker 直接yum install docker会提示找不到 > docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine Loaded plugins: fastestmirror No Match for argument: …

Ae:常用内置抠像效果

Ae 中的抠像都是基于效果控件来实现的,最终生成动态遮罩来控制画面像素的透明度。 常用的内置抠像效果有:提取、线性颜色键、颜色差值键、内部/外部键等。 黑色或白色背景的抠像 对于白色或黑色背景的素材,可直接尝试图层混合模式。 或者&…

一文打通File类

目录 基本概述 常用构造器 构造方法 路径分隔符 常用方法 File类的获取功能 File类的重命名功能 File类的判断功能 File类的创建功能 File类的删除功能 在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象,也就是说,如果…

一大波智能AI对话机器人来袭——一共20个可以白嫖的ChatGPT网站供您使用,总有一款能打开~

文心一言https://yiyan.baidu.com 小莓用AIhttps://ai.usesless.com/chat NotGPTNotGPT,AI问答,AI绘画,AI协助提升工作效率https://chat2.pypig.com https://chatgptmirror.comhttps://chatgptmirror.com 超大模型AI对话https://chat.ktoai.com ChatGPTYour personal ChatGPT B…

使用nsenter检查docker网络

文章目录 一 环境准备二 需求三 解决 一 环境准备 虚拟机IP:10.0.0.100 拉取的三个镜像,镜像名称与ID如下: [rootcanway01 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED …

flink 解决udf重复调用的问题(亲测有效)

问题 针对如图的情况,udf会被调用4次,如果udf是计算型的,后果很严重。接下来介绍一下解决的办法。 更改底层源码 大神的博客继续往下看,有测试过程测试UDF 1.写两个udf public class Udf1 extends ScalarFunction {public long eval(long ordernumber

【宝塔建站】Ubuntu下使用宝塔面板一键搭建Z-Blog个人博客

文章目录 1.前言2.网站搭建2.1. 网页下载和安装2.2.网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测试5.结语 1.前言 Ubuntu系统作…

CyberLink的照片编辑软件PhotoDirector Ultra 14.5版本在win10系统的下载与安装配置教程

目录 前言一、PhotoDirector Ultra安装二、使用配置总结 前言 PhotoDirector Ultra是由CyberLink公司开发的一款专业的照片编辑工具,旨在为用户提供全面的照片后期制作和编辑解决方案。其具有多种编辑工具,例如调整曝光、色彩、对比度和锐度等参数&…

深入解析Linux C/C++ 编程中的内存泄漏问题

深入解析Linux C/C 编程中的内存泄漏问题 I. 前言 (Introduction)1.1 文章目的与内容概述 (Purpose and Overview of the Content)1.2 重要性和实用性的说明 (Significance and Practicality Explanation)1.3 数据结构与内存泄漏的基本概念 (Basic Concepts of Data Structure …

python视角对比其他编程语言

引用《编程小白的第一本Python入门书》

ArcMap:第一届全国大学生GIS应用技能大赛(滁州学院)详解-上午题

目录 01 上午题 1.1 题目 1.2 数据 1.2.1 如何添加比赛数据? 1.2.2 比赛数据展示 1.3 思路 1.3.1 坐标系问题 1.4 实操 1.4.1 建立空间数据库和比赛数据导入 1.4.2 坐标系问题解决 1.4.3 要素的订正 1.4.4 数据入库和符号化管理; 1.4.5 其…