2.3.3volatile变量在多个线程间可见
来源:互联网 发布:淘宝产品搜索不到 编辑:程序博客网 时间:2024/06/06 12:40
volatile:注意作用是变量在多个线程间可见。举例说明。
package test;/** * Created by sunyifeng on 17/10/13. */public class RunThread extends Thread { private boolean isRunning = true; public boolean isRunning() { return isRunning; } public void setRunning(boolean running) { isRunning = running; } @Override public void run() { System.out.println("进入run方法"); while (isRunning == true) { // //System.out.println("进入while循环"); } System.out.println("线程被停止了"); }}
package test;/** * Created by sunyifeng on 17/10/13. */public class Run { public static void main(String[] args) throws InterruptedException { RunThread runThread = new RunThread(); runThread.start(); Thread.sleep(10); // main线程沉睡10毫秒 runThread.setRunning(false); System.out.println("已经赋值为false"); }}
运行结果:进入run方法
已经赋值为false
程序分析:
程序进入死循环,停不下来,前面我们已经做过实验,这种栗子,多线程是可以让程序停止的。本人的运行环境:MarBook-Pro(可以在JVM的运行参数中加-server)。原因是私有堆栈和共有堆栈中变量的值不一致造成的。更改程序,用volatile修饰变量:
volatile private boolean isRunning = true;
运行结果:进入run方法
已经赋值为false
线程被停止了
分析程序:
通过使用volatile关键字,强制从公共内存堆栈中读取变量的值。
volatile和synchronized使用总结:
1、volatile只能修饰变量,不能修饰方法及代码块,是线程同步轻量级的实现;
2、volatile不会发生阻塞,synchronized会出现阻塞;
3、volatile不能保证数据原子性,synchronized能保证数据原子性。
阅读全文
0 0
- 2.3.3volatile变量在多个线程间可见
- java volatile 线程间的变量可见性
- 多线程间一致可见性volatile变量
- 共享变量在线程间的可见性
- 变量可见性和Volatile
- Java Volatile 变量的可见性
- 线程中volatile变量
- volatile变量在多线程同步时运用的优点: 1、锁一次只允许一个线程访问值,volatile 允许多个线程执行读操作,因此当使用 volatile 保证读代码路径时,要比使用锁执行全部代码路径获得
- volatile变量在多线程同步时运用的优点: 1、锁一次只允许一个线程访问值,volatile 允许多个线程执行读操作,因此当使用 volatile 保证读代码路径时,要比使用锁执行全部代码路径获得
- Java关键字volatile,原子性,变量可见性
- java学习12--线程的可见性,synchronized,volatile使用
- volatile关键字用法以及线程数据可见性的问题
- Java之多线程内存可见性_2(volatile实现可见性)
- volatile在线程中的作用
- 线程基础----深入理解volatile变量
- volatile可见性原理
- volatile 内存可见性
- 多个线程共享DLL中的变量
- string 类 笔记
- Ros_7
- Ubuntu16.04搭建WordPress
- Java Web 3.4.3 例题解析
- CSS Mastery摘要(4)--Beautiful Boxes
- 2.3.3volatile变量在多个线程间可见
- MATLAB 将多页.tif格式的图片转成多张单页的图片
- Ros_8
- #eclipse导入项目报错(两种错误:红色叹号,红色叉号)+ xml配置文件(光标任意位置)注释一行 快捷键:ctrl+shift+C
- String与StringBuffer的区别
- 深度学习深理解(一)-logistic回归与梯度下降法
- Ubuntu下OpenCV编程[2]-cv::Mat类
- XML学习之DOM解析
- 『用随机森林探测ss流量』论文解读