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

    volatile

    volatile关键字的主要作用是使变量在多个线程间可见

    使用方法:

    private volatile int number=0;

    图示:

     两个线程t1和t2共享一份数据,int a=0,但是两个线程间是不可见的,t1修改a=10,但对于t2来说a还是从0变到20,两个线程是独立的,不可见的;

    我想做的是a如果变化了,t1和t2实时的知道a变化了,即a不是从0变到20,而是从10变到20;即t1对a发生修改,t2实时知道a发生变化了;同理,t2中a变成20了,t1也能马上知道值变成20了;volatile关键字就能实现这个.

     运行结果如下:

     虽然输出了isRunning的值已经被设置成了false,但是线程仍然在运行;这是什么原因呢?

    这是java  jdk的原因

    java  jdk在执行一个程序时,都会分配一个单独的空间,但是在jdk1.5以后,它对每一个线程做了一个优化,对每个线程加了一块独立的运行空间,这块空间装主内存的一些引用(当前线程的一些引用变量),相当于拷贝了一份副本,线程运行时直接去副本取内容.这样做的目的是,让线程在执行时效率更高

     加volatile关键字后:

     这是为什么呢?

    内存分析图:

     volatile只具有可见性不具备原子性(原子操作是不可分割的,在执行完毕不会被任何其它任务或事件中断)

  • 相关阅读:
    sqlserver tips
    mysql tips
    小知识点集锦
    设计模式
    将微博或者qq空间的说说同步至博客园 wcf+js(ajax)跨域请求(1)
    WCF服务寄宿IIS与Windows服务
    C# 基础小知识之yield 关键字
    WPF命令绑定 自定义命令
    KnockOut 绑定之foreach绑定(mvc+knockout)
    P5019 铺设道路
  • 原文地址:https://www.cnblogs.com/curedfisher/p/11981973.html
Copyright © 2011-2022 走看看