Java 多线程梳理(二、线程安全)

链接: Java 多线程梳理(一、线程概述).


  • 线程安全问题
  • 原子性
  • 可见性
  • 有序性
  • java内存模型

2. 线程安全问题

多线程安全主要是指多个线程对同一个对象的实例变量进行操作时,会出现值被更改,值不同步的情况.

线程安全问题表现为三个方面: 原子性,可见性有序性

2.1 原子性

原子(Atomic) 就是不可分割的意思. 原子操作的不可分割有两层含义:

  1. 访问(读,写)某个共享变量的操作从其他线程来看,该操作要么已经执行完毕,要么尚未发生, 即其他线程年看不到当前操作的中间结果
  2. 访问同一组共享变量的原子操作是不能够交错的

Java 有两种方式实现原子性:

  1. 一种是使用锁; 锁具有排它性,保证共享变量在某一时刻只能被一个线程访问.
  2. 一种利用处理器的 CAS(Compare and Swap)指令. CAS 指令直接在硬件(处理器和内存)层次上实现,看作是硬件锁

例:
如现实生活中从 ATM 机取款, 对于用户来说,要么操作成功,用户拿到钱, 余额减少了,增加了一条交易记录; 要么没拿到钱,相当于取款操作没有发生。

2.2 可见性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值