博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中volatile中的使用
阅读量:5114 次
发布时间:2019-06-13

本文共 913 字,大约阅读时间需要 3 分钟。

java中可见性有三种方式:

  1. volatile
  2. synchronized(开锁之前)
  3. final

这里介绍一下volatile。

public class VolatileThead extends Thread {        private volatile boolean stop=false;    public void stopMe(){        stop=true;    }    public void run(){        int i=0;        while(!stop){            i++;        }        System.out.println("Thread Stop Success!");    }    /**     * @param args     * @throws InterruptedException      */    public static void main(String[] args) throws InterruptedException {        VolatileThead v = new VolatileThead();        v.start();        Thread.sleep(1000);        v.stopMe();        Thread.sleep(1000);    }}

上面代码运行》》》成功打印》》》Thread Stop Success!

 

但是去掉 volatile 关键字就会进去死循环!!!(代码第二行)

原因:

  jvm中内存分为 主内存 和 工作内存(存放局部变量),一条线程执行时,会主内存先read共享变量,然后工作内存load共享变量,作为副本存放在工作内存中,工作内存修改副本,并没有修改主内存中的共享变量,需要使用volatile关键字提示同步修改,这样保证线程的可见性(就是一个线程修改变量,其他线程都立即知道)

转载于:https://www.cnblogs.com/kangjingwei/p/8651919.html

你可能感兴趣的文章
C# 如何创建一个Windows服务
查看>>
集群和分布式区别
查看>>
Android(java)学习笔记153:采用post请求提交数据到服务器(qq登录案例)
查看>>
Java基础知识强化101:Java 中的 String对象真的不可变吗 ?
查看>>
Android 高级UI设计笔记12:ImageSwitcher图片切换器
查看>>
虚拟主机与虚拟目录学习小结
查看>>
hlg1414安装雷达【贪心】
查看>>
Blog文章待看
查看>>
Golang flag包使用详解(一)
查看>>
python文件IO
查看>>
升级到 .NET Core 2.1
查看>>
对Java前四章的感受
查看>>
【Linux】ping命令详解
查看>>
对团队成员公开感谢博客
查看>>
java学习第三天
查看>>
python目录
查看>>
django+uwsgi+nginx+sqlite3部署+screen
查看>>
Andriod小型管理系统(Activity,SQLite库操作,ListView操作)(源代码下载)
查看>>
在Server上得到数据组装成HTML后导出到Excel。两种方法。
查看>>
浅谈项目需求变更管理
查看>>