volatile关键字及相同知识点
要理解 volatile 为什么能保证可见性,先看 Java 内存模型:变量在主内存,线程在工作内存里操作拷贝,线程之间不能直接读对方工作内存。 在此模型下会出现缓存一致性问题(两个线程对 i++ 最终得到 11 而不是 12)。并发编程要同时抓住原子性、可见性、有序性,再看 volatile 能做…
要理解 volatile 为什么能保证可见性,先看 Java 内存模型:变量在主内存,线程在工作内存里操作拷贝,线程之间不能直接读对方工作内存。 在此模型下会出现缓存一致性问题(两个线程对 i++ 最终得到 11 而不是 12)。并发编程要同时抓住原子性、可见性、有序性,再看 volatile 能做…
声明类、变量和方法时可以用 final 修饰,表示终态:这个东西定下来以后就不能再改继承关系、不能再被覆盖、不能再被重新赋值。 具体规定:final 类不能被继承;final 方法不能被子类重写;final 变量(成员或局部)只能赋值一次,成为常量。 修饰对象 效果 补充 类 不能再派生子类 方法隐…
static 修饰变量或方法,表示它们是静态的:属于类,而不属于某一个对象。 静态变量和静态方法可以通过类名访问,不必先 new 出对象,所以也叫类变量和类方法。实例变量则必须通过对象访问,因为每个对象自己有一份,值可以不同。 对比 静态(类)成员 实例成员 内存 类加载时一份,所有对象共享 每 n…
super 和 this 成对出现:this 表示当前类的实例,super 用来访问父类。 子类里可以用点号取父类的成员变量和方法;方法定义在更上面的祖先类时,Java 会自动向上追溯,直到找到为止。调用看起来就像本类自己的行为一样。 对比 this super 指向 当前对象 不是对象引用,只是让…
this 用来表示当前对象:哪个实例正在执行这段代码,this 就指向谁。通过它可以访问本对象的成员变量和实例方法。 this 只在实例化之后才有意义,静态方法里没有当前对象,因此不能用 this。 常见用法可以先放在一张表里对照: 写法 含义 注意 this.成员 访问当前对象的字段或方法 没有重…