开发者社区> 问答> 正文

Java语言中,volatile 与原子性原有什么联系?

Java语言中,volatile 与原子性原有什么联系?

展开
收起
开发者小助手_LS 2021-11-03 18:26:07 880 0
1 条回答
写回答
取消 提交回答
  • 线程是CPU调度的基本单位。CPU 有时间片的概念,会根据不同的调度算法进行线程调度。当一个线程获得时间片之后开始执行,在时间片耗尽之后,就会失去CPU 使用权。所以在多线程场景下,由于时间片在线程间轮换,就会发生原子性问题。

    为了保证原子性,需要通过字节码指令monitorenter 和monitorexit,但是volatile 和这两个指令之间是没有任何关系的。所以,volatile 是不能保证原子性的。

    在以下两个场景中可以使用volatile 来代替synchronized:

    1、运算结果并不依赖变量的当前值,或者能够确保只有单一的线程会修改变量的值。

    2、变量不需要与其他状态变量共同参与不变约束。

    除以上场景外,都需要使用其他方式来保证原子性,如synchronized或者concurrent包。

    资料来源:《Java工程师成神之路(基础篇)》,链接:https://developer.aliyun.com/topic/download?id=923

    2021-11-03 19:14:21
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
阿里云开发者社区官方技术圈,用户产品功能发布、用户反馈收集等。
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载