Java并发中volatile关键字是如何实现可见性的?

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

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

Java并发中volatile关键字是如何实现可见性的?

前言:Java语言提供了一种轻量级的同步机制,即volatile变量,用于确保变量的更新操作对其他线程立即可见。

当将变量声明为volatile类型后,编译器和运行时都会注意到这个变量是共享的。因此,任何对该变量的写操作都会立即通知其他线程。

前言

Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。

 

在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。

当对非 volatile 变量进行读写的时候,每个线程先从内存拷贝变量到CPU缓存中。如果计算机有多个CPU,每个线程可能在不同的CPU上被处理,这意味着每个线程可以拷贝到不同的 CPU cache 中。

Java并发中volatile关键字是如何实现可见性的?

 

而声明变量是 volatile 时,JVM 保证了每次读变量都从内存中读,跳过 CPU cache 这一步。

阅读全文

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

Java并发中volatile关键字是如何实现可见性的?

前言:Java语言提供了一种轻量级的同步机制,即volatile变量,用于确保变量的更新操作对其他线程立即可见。

当将变量声明为volatile类型后,编译器和运行时都会注意到这个变量是共享的。因此,任何对该变量的写操作都会立即通知其他线程。

前言

Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。

 

在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。

当对非 volatile 变量进行读写的时候,每个线程先从内存拷贝变量到CPU缓存中。如果计算机有多个CPU,每个线程可能在不同的CPU上被处理,这意味着每个线程可以拷贝到不同的 CPU cache 中。

Java并发中volatile关键字是如何实现可见性的?

 

而声明变量是 volatile 时,JVM 保证了每次读变量都从内存中读,跳过 CPU cache 这一步。

阅读全文