多线程并发或线程安全问题如何解决

2023-09-21 08:50:31

1、通过volatile关键字修饰变量,可以实现线程之间的可见性,避免变量脏读的出现,底层是通过限制jvm指令的重新排序实现的,适用于一个线程修改,多个线程读的场景。

2、通过synchronized锁(任意对象)来实现线程同步,自动锁的思想,底层实现原理:当又线程进入同步代码快之后,利用jvm的计数器将锁的标记位置为1,当别的线程再想进入的时候,发现锁的标记为1,该线程就去锁池等待,当第一个线程出来之后,锁的标记会置为0,之后cpu会随机分配一个线程再次进入同步代码块

3、通过Lock锁的机制,进行手动lock和unlock,但是这种很容易出现死锁。注意加锁一级解锁的顺序,就可以避免死锁。

4、通过使用线程安全的集合类,就可以解决并发问题,如:

ConcurrentHashMap、CopyonWriteArrayList等。

5、使用并发包下面的原子类,底层使用CAS机制(乐观锁),可以解决并发问题,如atomiclnteger线程安全的原子类。

6、使用线程池来创建和管理线程,也可以一定程度上解决并发问题

7、使用ThreadLocal来修饰变量,可以解决并发问题

更多推荐

华为OD机试 - 计算面积 - 逻辑分析(Java 2023 B卷 100分)

目录专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明华为OD机试2023B卷题库疯狂收录中,刷题点这里专栏导读本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题

Ansys Zemax | 如何建立二向分色分光镜

分光镜(Beamsplitter)可被运用在许多不同的场合。一般而言,入射光抵达二向分色分光镜(dichroicbeamsplitter)时,会根据波长的差异产生穿透或反射的现象。这篇文章将说明如何在OpticStudio的非序列模式(non-sequentialmode)中建立二向分色分光镜,以及如何根据需求自订镀膜

uniapp项目实践总结(十六)自定义下拉刷新组件

导语:在日常的开发过程中,我们经常遇到下拉刷新的场景,很方便的刷新游览的内容,在此我也实现了一个下拉刷新的自定义组件。目录准备工作原理分析组件实现实战演练内置刷新案例展示准备工作在components新建一个q-pull文件夹,并新建一个q-pull.vue的组件;按照前面文章所说的页面结构,编写好预定的自定义下拉刷新

[Qt]控件

文章摘于爱编程的大丙文章目录1.按钮类型控件1.1按钮基类QAbstractButton1.1.1标题和图标1.1.2按钮的Check属性1.1.3信号1.1.4槽函数1.2QPushButton1.2.1常用API1.2.2按钮的使用1.3QToolButton1.3.1常用API1.3.2按钮的使用1.4QRadi

PT@全概率公式和贝叶斯公式@后验概率和信念度量

文章目录abstract完备事件组(划分)基本性质全概率公式例贝叶斯公式例对立事件下的常用形式先验概率和后验概率例概率作为衡量人们对客观事件的信念度量补充条件概率的链式法则MorethantwoeventsExample例Morethantworandomvariables(多维随机变量下的链式乘法法则)Example

Vue路由与nodejs下载安装及环境变量的配置

目录前言一、Vue路由1.路由简介是什么作用应用场景2.SPA简介SPA是什么SPA的优点注意事项3.路由实现思路1.引入路由的js依赖2.定义组件3.定义组件与路径的对应关系4.通过路由关系获取路由对象router5.将路由对象挂载到实例中6.触发路由事件的按钮7.定义锚点---路由内容完整案例二、NodeJS下载安

Java工具类:HttpUtil项目实战

步骤1.导入maven依赖2.编写工具类导入maven依赖<!--HttpClinet核心包--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</ver

【Hash表】判断字母异位词-力扣 242

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kuan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术点,如集合,jvm,并发编程redis,kaf

计网第五章(运输层)(五)(TCP拥塞控制)

目录一、基本概念二、拥塞控制算法慢开始:拥塞避免:快重传:快恢复:一、基本概念若对网络中某一资源的需求超过了该资源所能提供的可用部分(供不应求),网络性能就会变坏。在计算机网络中的带宽、交换节点中的缓存和处理机等都是网络的资源。如果出现拥塞而不控制,整个网络的吞吐量(单位时间内从网络输出的分组数量)会随着输入负荷的增大

数据结构——查找(二叉排序树)

文章目录前言一、二叉排序树构造二叉排序树步骤构造二叉排序树步骤图二叉排序树的查找二叉排序树查找递归算法二叉排序树查找非递归算法二叉排序树的插入二叉排序树插入结点——递归算法二叉排序树插入结点——非递归算法二叉排序树的删除总结前言二叉排序树查找定义二叉排序树构造二叉排序树查找递归和非递归算法二叉排序树插入递归和非递归算法

【Python】pyecharts 模块 ⑥ ( 绘制柱状图 | pyecharts 绘制柱状图步骤 | 柱状图 x 轴 / y 轴 翻转 | 柱状图数据标签位置设置 )

文章目录一、pyecharts绘制基础柱状图1、pyecharts绘制柱状图步骤2、代码示例-pyecharts绘制柱状图二、柱状图其它设置1、柱状图x轴/y轴翻转2、柱状图数据标签位置设置pyecharts画廊网站:https://gallery.pyecharts.org/#/在该网站可查看官方示例一、pyecha

热文推荐