Title

volatile 和 synchronized 的区别

 

public class Main {

    static volatile int age = 10;
    public int getAge() {
        return age;
    }

    public int  setAge() {
        //age = age+2 线程不安全,因为 volatile 只能保证线程之间内存的可见性,但是不能保证线程操作的原子性
        age = age+2;
        
        return age;
    }
}

age 变量是存在于主内存的,多个线程之间操作 age ,其实只是操作 线程 对 age 拷贝的值【如果你没有加 volatile】,如果加了 volatile的话, 每次 getAge  都会从主内存中读取数据,而不是 去读取 线程拷贝 的 age 的副本

 

posted @ 2020-10-29 08:02  .geek  阅读(90)  评论(0编辑  收藏  举报