当前位置: 首页 > news >正文

多线程并发编程笔记03(小滴课堂)---线程安全性

 

 

 原子性操作:

这样一段代码。

我们输出一下:

我们发现它的结果和我们想的不太一样。

正常应该输出1000.

这是因为没有保证原子性。

所以我们来加上原子性:

这样就保证了我们的原子性。

接下来我们来细说说这个关键字:

 

 

 我发现我们同时输出了这两个实例对象。

所以我们可以看出我们修饰普通方法是锁住实例对象,而不是锁住这个类。

修饰静态方法:修饰整个类

调用静态方法。

 

这次是第一个线程方法执行完,第一个线程睡眠结束之后才执行第二个线程中的方法。

 修饰代码块:

 修饰代码块锁住的也是对象实例。就是synchronized括号里的对象

volatile关键字和使用场景:

 

 单例与线程安全:

饿汉式:

 

饿汉式本身就是线程安全的,所以不需要去加锁等操作。

懒汉式:

我们模拟了一个耗时场景下的懒汉式单例模式:

我们可以看到它返回的每个单例实例对象都不同,并不是我们想要的单例效果。

由此也可以看出我们的懒汉式简单写法是不符合线程安全的。

 

我们只需要给返回的方法加上synchronized关键字,再去运行:

就可以保证我们的线程安全了。

 但是这种写法并不是一个最好的写法,因为我们在方法上加锁,当多线程的时候,其他线程不能立刻调用这个方法,所以也是比较耗时的。

我们可以换个地方加synchronized关键字并进行双重校验:

 

但是java中存在指令重排的情况,所以我们还要去进行一步修改才能做到最好的让懒汉式实现线程安全:

我们给类加上volatile关键字,这个关键字可以避免指令重排。

如何去避免线程安全性问题:

 

http://www.lryc.cn/news/44254.html

相关文章:

  • 提升代码质量,使用插件对 java 代码进行扫描检查分析
  • 如何用秒验提升用户体验和转换率?
  • 【新】(2023Q2模拟题JAVA)华为OD机试 - 机器人活动区域
  • 2023软件测试面试真题宝典大汇总,没收藏的都后悔了
  • 十、MyBatis的逆向工程
  • 网站是怎么屏蔽脏话的呢:简单学会SpringBoot项目敏感词、违规词过滤方案
  • kafka经典面试题
  • 我的CSDN笔记总索引(阅读量降序,代码自动遍历生成HTML5源码)
  • 修改Windows hosts文件的解决方案
  • 愤怒的Spring(三)Idaea Maven搭建Spring并运行项目(超详细,超全)
  • NDK(三):JNIEnv解析
  • 禅道——图文安装及使用教程
  • Java基础——枚举类enum
  • 【机器学习】一文了解如何评估和选择最佳机器学习模型并绘制ROC曲线?
  • vue3 笔记
  • 第12章_MySQL数据类型精讲
  • 二叉树路径总和第一题
  • @RefreshScope源码解析
  • 【开发】后端框架——Spring
  • vue中的自定义指令
  • 技术分享及探讨
  • 人工智能AI
  • 2022天梯赛补题
  • 字节跳动测试岗面试挂在2面,复盘后,我总结了失败原因,决定再战一次...
  • Nodejs实现通用的加密和哈希算法(MD5、SHA1、Hmac、AES、Diffie-Hellman、RSA),crypto模块详解
  • 测试行业3年经验,从大厂裸辞后,面试阿里、字节全都一面挂,被面试官说我的水平还不如应届生
  • 安卓悬浮窗口,  丝滑双指缩放视频窗口
  • 300左右哪款蓝牙耳机适合学生用?四款便宜质量好的蓝牙耳机推荐
  • 桥梁设计模式
  • 【华为OD机试 2023最新 】 新员工座位(C++)