Riddle 发布的文章
临时公告2022-11-18
由于最近把这里弄的有点乱,因此近期会优先整理当前内容...
线程安全的单例为什么要这样写(双重检查)
单线程懒汉模式
原始方法是这样的:
// 单线程懒汉模式实现
public static Singleton getInstance() {
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
return INSTANCE;
}
静态变量&静态代码块
Java 静态代码块、代码块、构造器等执行顺序
结论先行
静态代码块 → 普通代码块 → 构造方法
父类静态代码块 → 子类静态代码块 → 父类普通代码块 → 父类构造方法 → 子类普通代码块 → 子类构造方法
Java初始化顺序
- 在new B()一个实例时首先要进行类的装载。(类只有在使用New调用创建的时候才会被java类装载器装入)
- 在装载类时,先装载父类A,再装载子类B
- 装载父类A后,完成静态动作(包括静态代码和变量,它们的级别是相同的,安装代码中出现的顺序初始化)
- 装载子类B后,完成静态动作
类装载完成,开始进行实例化 - 在实例化子类B时,先要实例化父类A
- 实例化父类A时,先成员实例化(非静态代码)
- 父类A的构造方法
- 子类B的成员实例化(非静态代码)
- 子类B的构造方法