类生命周期:
- classloader将字节文件加载到jvm内存
- 链接(校验,准备,解析),其中准备阶段将静态变量赋予默认值
- 初始化过程将静态变量赋值(赋值过程按指令顺序执行)
- 垃圾回收GC
单例:
- 将构造方法私有,并提供获取实例方法,实例为静态变量
- 获取实例方法需要两重判断才能使得多线程安全获得单例(先判断变量为是否为空,若空,则将类加锁,然后再次判断变量是否为空,才能进行生成一个新实例),因为A线程在拿到变量为空到准备加锁过程中,B线程可能已经拿到锁进行实例化,并退出,故A线程再次进入,如果不判断变量为空,则会再次生成新实例
- 为了更完美生成单例,还需要将1中的静态变量加上volatile关键字修订,虽然它不能控制并发,但是它能让变量在多线程中可见,并且禁止指令重排序,假如赋值指令和初始化指令可被重排,就容易造成成员变量赋值时机不对的情况。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。