1.volatile字段理解
volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作
例子一:
- 利用happen—before规则分析DCL
-
ps:从编译器指令重排序来分析DCL
编译器指令重排序.png -
编译器重排序
编译器.png -
处理器重排序
volatile读.png
volatile写.png
当应用需要到某个类时,则会按照下面的顺序进行类加载:
- 使用bootstrap引导类加载器加载(位于jre/lib/ext下)
- 使用system系统类加载器加载(位于CATALINA_HOME/bin下)
- 使用应用类加载器在WEB-INF/classes中加载
- 使用应用类加载器在WEB-INF/lib中加载
- 使用common类加载器在CATALINA_HOME/lib中加载
3.加载顺序
class X {
Y b=new Y();
X() {
System.out.println("X");
}
}
class Y {
Y() {
System.out.println("Y");
}
}
public class Z extends X {
Y y=new Y();
Z() {
super();
System.out.println("Z");
}
public static void main(String[] args) {
new Z();
}
}
//输出结果yxyz
父类静态–>子类静态—>父类成员变量–>父类构造方法—–>子类成员变量—->子类构造方法
网友评论