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



  • 相关阅读:
    RabbitMQ
    操作系统复习知识
    计算机网络相关知识复习
    转帖--Linux的文件检索(locate、find、which、whereis)
    go-ioutil
    使用wrk进行压测
    03x01 Java基础语法
    02x03 Hello World!!!
    02x02 环境搭建
    02x01 Java入门
  • 原文地址:https://www.cnblogs.com/xxt19970908/p/7302422.html
Copyright © 2011-2022 走看看