并发编程的三个特性

并发编程中的三个特性

  1. 原子性
    一次操作要么成功要么失败。
  2. 可见性
    多线程操作一个变量时,一个线程修改了值,要对另外线程可见。
  3. 有序性
    执行有先后顺序

volatile关键字:保证不同线程对share操作的可见性,禁止对执行顺序的重排序。
不保证原子性 字节码文件 如:a++操作是先获取、修改、返回,没有原子性
保证可见性,保证有序性

volatile vs synchronized:
使用层面
    volatile:修饰实例变量和类变量(即成员变量和静态变量),不能修饰方法和局部变量。
    synchronized:不能修饰变量,只能修饰方法或代码块。
原子性
    volatile不支持
可见性
    都ok
有序性
    都ok
其他
    synchronized是阻塞的
    volatile不会线程阻塞

JMM如何保证三大特性

  • 原子性
    i++ :有get有set的操作不是原子性的。
    简单的操作放一起也不一定是原子的。
    复杂的操作没办法保证,只能用synchronized、锁、AtomicInteger等
  • 可见行
    volatile
    synchronized
    JUC中的lock
  • 有序性
    volatile
    synchronized
    JUC中的lock

常见并发工具类
CountDownLatch
CyclicBarrier
Semaphore

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值