zoukankan      html  css  js  c++  java
  • 7.volatile关键字

    volatile:一个线程修改了某一个共享变量的值,其他线程也是否能够立即知道这个修改的

    1.主要是让该“变量”在多个线程中可见,在java中每一个线程都有一块自己的工作区,其中就存放着所有线程“共享变量”的变量值的拷贝、复制。
    2.当线程执行时,他在自己的工作内存区操作的这些变量,为了存取这些变量,一个线程通常会先去获取锁,并去除它的内存工作区,把这个共享变量从所有线程的
      的工作区拿到他自己的工作内存区,当自己操作完成后,解锁并把该变量的值重新“刷新写入”到共享内存中。
    3.线程的操作:使用、赋值、装载、存储、锁定、解锁
    4.主内存可以执行:read、wrlte、lock、unlock 原子性操作
    5.强制线程去主内存中(共享变量)去读取变量,而不是去此案的工作内存区取出、从而实现了多个线程的变量可见性,满足线程安全。
    1. package demo1;
    2. /**
    3. * Created by liudan on 2017/7/2.
    4. */
    5. public class MyThread_volatile extends Thread {
    6. private volatile boolean isRunning = true;
    7. public void setRunning(boolean running) {
    8. isRunning = running;
    9. }
    10. @Override
    11. public void run() {
    12. System.err.println("进入 run 方法");
    13. while (isRunning==true){
    14. /* System.err.println("run 方法操作中.................");*/
    15. }
    16. System.err.println("停止run 方法");
    17. }
    18. public static void main(String[] args) throws InterruptedException {
    19. MyThread_volatile thread_volatile = new MyThread_volatile();
    20. thread_volatile.start();
    21. Thread.sleep(3000);
    22. thread_volatile.setRunning(false);
    23. System.err.println("setRunning 方法");
    24. Thread.sleep(1000);
    25. System.err.println("结束:"+thread_volatile.isRunning);
    26. }
    27. }
    28. 输出:
    29. 进入 run 方法 setRunning 方法 停止run 方法 结束:false



  • 相关阅读:
    Win8系统 Python安装
    一些安卓开源框架整理
    Android 媒体键监听以及模拟媒体键盘的实现 demo
    android View 自动 GONE 问题
    Android 定时器TimerTask 简单使用
    关于Android studio 相对 eclipse 优点
    Java序列化与反序列化
    android shape的使用 边框
    Android Studio 修改 包名 package name
    Android WebView Long Press长按保存图片到手机
  • 原文地址:https://www.cnblogs.com/xxt19970908/p/7302422.html
Copyright © 2011-2022 走看看