马上过年祝大家新年快乐牛气冲天;
很好,想必这个单例模式大家都会,这里有一个重点就是volatile关键字要不要加,这里先给出结论加一定要加。
先解释一下代码:第一个if保证其他线程不会一上来就去竞争锁提高效率,第二个if保证对象单例。好解释完了说下关键字volatile,嗯这哥们平时写业务代码不咋用,只有写架构的时候用到底层会做一些事情:1:线程间可见:内存中的数据被此关键字修饰当其他线程修改后,另外线程立马可见。2:禁止重排(乱序)汇编的指令。因此必须要加。
以上是看马士兵老师的视频给的经验互相学习。加油。
private static volatile HodrSoHeaderController instance;
private HodrSoHeaderController(){}
public static HodrSoHeaderController getInstance(){
if(instance == null){
synchronized (HodrSoHeaderController.class){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(instance == null){
instance = new HodrSoHeaderController();
}
}
}
return instance;
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(()->{
System.out.println(HodrSoHeaderController.getInstance().hashCode());
}).start();
}
}