线程安全问题

1 原因
  1. 线程在操作系统中随机调度,抢占式执行

  2. 多个线程同时修改同一个变量

  3. 修改操作,不是”原子“的。原子是指在cpu视角不可分割的最小单位:一条指令。

  4. 内存可见性问题

  5. 指令重排序

2 解决方案
  1. 针对第三个原因,把”非原子“的修改变成”原子“

  • java中提供了synchronized关键字,来完成加锁操作

    • synchronized (locker) 锁任意对象

    • synchronized (this) 锁当前对象

    • ()内为锁定的对象

    • {}里的就是要打包到一起的代码

    • 本质是把随机的并发执行过程强制变成串行

    • synchronized是JVM提供的功能,通过c++代码实现,进一步的依靠操作系统api实现的加锁。操作系统api来自于cpu上支持的特殊指令实现的。

    • 锁对象就是this

    • static给类对象加锁

    • 死锁

      1. 一个线程针对一把锁连续加锁两次

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值