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

java学习part26线程安全

136-多线程-同步代码块解决两种线程创建方式的线程安全问题_哔哩哔哩_bilibili

1.安全问题

关键在于某些数据操作

2.解决

2.1同步代码块

相当于给数据操作加了互斥锁

2.1.1在实现runnable接口的方式下

锁对象要求必须是唯一的,因为可以看成是谁占了这个对象(锁)谁就在独享这段代码,必须让出对象别人才能用,如果是多个对象那么每个线程都各用各的,达不到互斥的效果。

比如:

那么锁对象怎么来?

一个实现类实例传给多个Thread构造,实例里obj对象也只有一个。因此总共唯一obj 

tips:在这种情况下,用什么对象只要唯一都可以,所以可以用this代替obj

2.1.2在继承thread的方式下

obj必须加static来保证多个对象时候obj的唯一

2.1.3综上:

2.2同步方法

2.2.1过渡

2.2.2同步方法

在方法前面加同步关键字

如果同步方法是非静态的,默认同步监视器(锁)是this

2.2.3在实现runnable接口的方式下

2.2.4在继承thread的方式下

错误:

正确,但要注意该方法功能是否适合静态,是否应该和类绑定:

2.2.5综上:

2.3弊端

3.线程安全懒汉式

3.1同步方法

3.2同步代码块

3.3效率升级版

 


http://www.kler.cn/a/153985.html

相关文章:

  • 重构代码之删除对参数的赋值
  • 移动应用开发:使用Android Studio 实现登录页与注册页跳转
  • 人工智能的未来展望与挑战
  • Java通过calcite实时读取kafka中的数据
  • C++ | Leetcode C++题解之第565题数组嵌套
  • vulhub之log4j
  • Maven终端打包时报Unknown lifecycle phase “.test.skip=true“
  • Java Servlet
  • MySQL安全相关——TDE和数据脱敏功能介绍
  • C++的类和对象(一)
  • 分享88个节日PPT,总有一款适合您
  • 【slab/0x40 UAF】TPCTF2023 - core 一题多解
  • 微信小程序实现打分效果代码整理
  • Golang分布式事务
  • 尝试修改vim光标的思路
  • 文件搜索工具HoudahSpot mac中文版特点
  • 网站更换IP的四大注意事项
  • MagicPipe3D地下管网三维建模数据规格
  • 医疗器械设备模组的具体应用
  • UniApp项目中 使用微信小程序原生语言 进行开发
  • 如何在vs2017及以前版本(vs2010、vs2015)上添加 添加类型库中的MFC类
  • C++作业4
  • 解决了布局问题1和布局问题2,接下来,你的Main函数如果写成下面这样,直接运行,什么也不会显示?
  • java设计模式学习之【建造者模式】
  • TCP网络常见名词
  • 本地navicate连接不上远程mysql主机