volatile关键字 作用 是使变量在多个线程间可见
在java 中 ,每一个线程都会有一个工作区内存,其中存放着线程共享的主内存中的变量值的一个拷贝,当线程执行时 在自己的工作区中操作这些变量,为了存取一个共享的变量,一个线程通常先获取锁定并去清除它的内存工作区,把这些共享变量从所有线程的共享内存区中正确的装入到自己所有的工作区,当线程解锁时保证该工作区中变量的值写回到共享内存中。
一个线程 可以执行的操作有 使用 赋值(assign) 装载(load) 存储(store) 锁定(lock) 解锁(unlock)\
而主存可以执行的操作有读(read) 写(write) 锁定(lock) 解锁(unlock) 每一个操作都是原子的
volatile的作用就是强制线程到主内存(共享内存) 里去读取变量,而不去线程工作区里读取,从而实现了多个线程间的变量可见,从而满足线程安全的可见性
下面这段代码很有迷惑性
public class RunThread extends Thread{ private boolean isRunning = true; public void setRunning(boolean isRunning) { this.isRunning = isRunning; } @Override public void run() { System.out.println(" run method .."); while (isRunning) { } System.out.println(" run method end "); } public static void main(String[] args) { RunThread rThread = new RunThread(); rThread.start(); try { Thread.sleep(3000); rThread.setRunning(false); System.out.println(" isRunning 值已经被修改"); } catch (InterruptedException e) { e.printStackTrace(); } } }
之所以没有按照预想的执行 就是因为 变量拷贝到 线程自己的工作区内 而setRunning 方法 只把false 写放到了 主内存中 而线程自身工作内的 值仍为true
isRunning 变量 如果被 volatile修饰,则当变量值改变时 强制线程执行引擎去主内存里读取
相关推荐
java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java ...
### Java并发编程:volatile关键字解析 #### 一、内存模型的相关概念 在深入了解`volatile`关键字之前,我们首先需要理解计算机内存模型的一些基本概念。在现代计算机系统中,CPU为了提高执行效率,会将频繁访问的...
在Java并发编程中,volatile关键字是一种轻量级的同步机制,它用于确保变量的可见性和有序性。本文将详细探讨volatile关键字的工作原理、使用场景以及如何在实际开发中正确使用volatile。 volatile关键字是Java并发...
详解C中volatile关键字 volatile关键字是C语言中一个重要的关键字,它对变量的声明在不同编译环境下可能造成不同的结果。volatile关键字的作用是提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序...
"Java中的Volatile关键字详解" Java中的Volatile关键字详解是Java中的一种关键字,用于保证线程之间的可见性、原子性和有序性。下面是对Java中的Volatile关键字详解的知识点总结: 一、基本概念 1. 可见性:可见...
深入理解volatile关键字 volatile关键字是Java语言的高级特性,它可以保证可见性和禁止指令重排序,但是要弄清楚其工作原理,需要先弄懂Java内存模型。 保证可见性 volatile关键字可以保证可见性,即当一个线程...
在IT行业中,volatile关键字在编程,尤其是嵌入式系统和多线程编程中扮演着重要的角色。本篇文章将深入探讨volatile关键字的作用,并结合GD32F303单片机的使用场景,来阐述它在实际开发中的应用。 首先,volatile...
C++中volatile关键字及常见的误解总结 C++中的volatile关键字是一种类型修饰符,用来修饰变量,表示该变量可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。 volatile关键字的主要作用是提供对...
以前我们说过在一些简单的例子中,比如为一个字段赋值或递增该字段,我们需要对线程进行同步,虽然lock可以满足我们的需要,但是一个竞争锁一定会导致阻塞,然后忍受线程上下文切换和调度的开销,在一些高并发和性能...
Java并发编程中,volatile关键字扮演着重要的角色,它是一种轻量级的同步机制,与synchronized相比,volatile在性能上更优,因为它不会导致线程阻塞。在深入理解volatile的关键特性之前,我们需要先了解Java内存模型...
java volatile 关键字 学习
《面试官最爱的volatile关键字详解》 在Java编程中,volatile关键字是一个至关重要的概念,尤其在多线程环境下,理解并正确使用volatile是面试时必不可少的知识点。volatile被视为synchronized的一种轻量级实现,但...
Java中volatile关键字实现原理 volatile关键字是Java语言中的一种机制,用于保证变量在多线程之间的可见性。它是Java.util.concurrent包的核心,没有volatile就没有那么多的并发类供我们使用。本文详细解读一下...
Java 线程 volatile 关键字详解 Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。volatile 变量的同步性较差,但它有时更简单并且开销更低。volatile 变量可以被看作是一种 “程度较轻的 ...
内存栅栏和volatile关键字在多线程编程中扮演着至关重要的角色,它们是确保线程安全和正确数据同步的关键机制。本文将深入探讨这两个概念,以及它们如何在.NET环境中工作。 首先,我们要理解的是,现代计算机为了...
### C语言中的volatile关键字:深入解析与应用实践 C语言作为一种通用且强大的编程语言,在软件开发领域占据着举足轻重的地位。它以其简洁高效、接近硬件、良好的可移植性等特点,成为系统软件开发的首选语言之一。...
java里的volatile关键字详解.pdf
java语言的volatile教程,java语言的volatile关键字到底怎么用
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如 操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行 优化,从而可以提供...
### 深入解析volatile关键字:保障多线程下的数据一致性与可见性 #### 一、volatile的基本概念 ##### 1.1 可见性 在并发编程领域中,可见性是一个极为重要的概念,它指的是当一个线程修改了一个共享变量的值后,...