Java中volatile关键字在并发编程中具体有哪些作用?

2026-05-24 09:390阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2012个文字,预计阅读时间需要9分钟。

Java中volatile关键字在并发编程中具体有哪些作用?

在日日常编程中,volatile 关键字的频率并不高。大家可能对 volatile 的比较生疏,但深入一点也许会听到:volatile 只能保证可见性,不能保证原子性,无法有效保证线程安全。

日常编程中出现 volatile 关键字的频率并不高,大家可能对 volatile 关键字比较陌生,再深入一点也许是听闻 volatile 只能保证可见性而不能保证原子性,无法有效保证线程安全,于是更加避免使用 volatile ,简简单单加上synchronize关键字就完事了。本文稍微深入探讨 volatile 关键字,分析其作用及对应的使用场景。

并发编程的几个概念简述

首先简单介绍几个与并发编程相关的概念:

  • 可见性

可见性是指变量在线程之间是否可见,JVM 中默认情况下线程之间不具备可见性。

  • 原子性

对于 a = 0 操作是属于原子操作,但 a = a + 1 则不是原子操作,因为这里涉及到要先读取原来 a 的值,然后再为 a 加 1 ,当涉及多线程同时执行该语句时,会出现值不稳定的情况,所以非原子操作在并发场景下是不安全的。

  • 有序性

java 内存模型中允许编译器和处理器进行指令重排优化,重排过程中不会影响单个线程的指令执行顺序,但会影响多线程环境中的运行正确性

  • 指令重排

在多核 CPU 的情况下,为了充分利用时间片,提高指令执行效率,处理器会根据一定规则对指令进行重排序,由于规则的限定,指令重排后理论上最终运行结果不变。

阅读全文
标签:作用

本文共计2012个文字,预计阅读时间需要9分钟。

Java中volatile关键字在并发编程中具体有哪些作用?

在日日常编程中,volatile 关键字的频率并不高。大家可能对 volatile 的比较生疏,但深入一点也许会听到:volatile 只能保证可见性,不能保证原子性,无法有效保证线程安全。

日常编程中出现 volatile 关键字的频率并不高,大家可能对 volatile 关键字比较陌生,再深入一点也许是听闻 volatile 只能保证可见性而不能保证原子性,无法有效保证线程安全,于是更加避免使用 volatile ,简简单单加上synchronize关键字就完事了。本文稍微深入探讨 volatile 关键字,分析其作用及对应的使用场景。

并发编程的几个概念简述

首先简单介绍几个与并发编程相关的概念:

  • 可见性

可见性是指变量在线程之间是否可见,JVM 中默认情况下线程之间不具备可见性。

  • 原子性

对于 a = 0 操作是属于原子操作,但 a = a + 1 则不是原子操作,因为这里涉及到要先读取原来 a 的值,然后再为 a 加 1 ,当涉及多线程同时执行该语句时,会出现值不稳定的情况,所以非原子操作在并发场景下是不安全的。

  • 有序性

java 内存模型中允许编译器和处理器进行指令重排优化,重排过程中不会影响单个线程的指令执行顺序,但会影响多线程环境中的运行正确性

  • 指令重排

在多核 CPU 的情况下,为了充分利用时间片,提高指令执行效率,处理器会根据一定规则对指令进行重排序,由于规则的限定,指令重排后理论上最终运行结果不变。

阅读全文
标签:作用