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关键字基本介绍 volatile可以看成是synchronized的一种轻量级的实现,但volatile并不能完全代替synchronized,volatile有synchronized可见性的特性,但没有synchronized原子性的特性。 可见性即用volatile...
一个生动的例子,详解了Volatile关键字对变量的声明在不同编译环境下可能造成不同的结果
C/C++ 嵌入式 一些关键字: volatile关键字 Const关键字 static关键字 mutable 关键字
java volatile 关键字 学习
主要讲述java线程volatile关键字
6vc中volatile关键字的应用共4页.pdf.zip
java里的volatile关键字详解
volatile是java中的关键词之一,这篇文章主要给大家介绍了关于Java中volatile关键字的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
深入理解 volatile 关键字.doc
java里的volatile关键字详解.pdf
C++Volatile关键字[参考].pdf
多方面解读Java中的volatile关键字.rar
java语言的volatile教程,java语言的volatile关键字到底怎么用
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如 操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行 优化,从而可以提供...
深入了解java并发的volatile关键字的底层设计原理.docx
C语言中关键字volatile的作用,使用说明和例子
线程安全、volatile关键字、原子性、并发包、死锁、线程池学习笔记
volatile这个关键字,不仅仅在Java语言中有,在很多语言中都有的,而且其用法和语义也都是不尽相同的。这篇文章主要介绍了Java中的volatile关键字,需要的朋友可以参考下