volatile

Posted aLa神灯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了volatile相关的知识,希望对你有一定的参考价值。

package thread.key;

public class TestOne {

    private  volatile boolean bChange;
    
    public  static void main(String[] args) {

        /**
         * 
         * ---------  volatile
         * volatile是一种轻量级的同步,相对 synchronized开销小
         * 所谓可见性,是指当一条线程修改了共享变量的值,新值对于其他线程来说是可以立即得知的。
         * 
         * 
         * 1)写一个volatile变量时,JMM会将本地内存的变量强制刷新到主内存中去
         * 2)会使其他内存中的值无效
         * 
         * 
         * 
         * 
         * final
         * 
         * 
         * 原子性
         * 
         * 
         */
        
        try {
            TestOne testOne =  new TestOne();
            new Thread(){
                public void run() {
                    for(;;){
//                        System.out.println(Thread.currentThread()); 
                        testOne.changeStatus();
                        testOne.print(Thread.currentThread().toString());
                    }
                };
            }.start();
            Thread.sleep(1); 
            new Thread(){
                public void run() {
                    for(;;){
//                        System.out.println(Thread.currentThread()); 
//                    TestOne testOne =  new TestOne();
//                    testOne.changeStatus();
                        testOne.print(Thread.currentThread().toString());
                    }
                };
            }.start();
            
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }
    
    
    public void changeStatus(){
        bChange = true;
    }
    
    public void print(String str){
        
        if (bChange) {
            System.out.println("-----"+str); 
        }else {
            System.out.println(str);
        }
    }

}

 

以上是关于volatile的主要内容,如果未能解决你的问题,请参考以下文章

volatile

volatile

volatile原理解析

注意,不能错过的CAS+volatile实现同步代码块

注意,不能错过的CAS+volatile实现同步代码块

注意,不能错过的CAS+volatile实现同步代码块