Volatile 变量修饰符,只能修饰属性/静态属性
1.保证可见性(被修饰变量的可见性)
2.保证一定的顺序性(Object o = new Object());
3.保证 long/double 的原子性
4.不会导致线程切换
单例模式
某些类在进程的允许的过程中,只需要一个对象,不允许创建多个对象出来
Java中怎么写单例模式
1.饿汉模式
2.懒汉模式
一个简单的饿汉模式
class SingleTon{
private SingleTon(){}
private static SingleTon instance = new SingleTon();
public static SingleTon getInstance(){
return instance;
}
}
一个简单的懒汉模式
class SingleTon2{
private SingleTon2(){}
private static SingleTon2 instance = null;
public static SingleTon2 getInstance(){
if (instance == null){
instance = new SingleTon2();
}
return instance;
}
}
👇👇
class SingleTon2{
private SingleTon2(){}//不允许外部类构造对象
private static volatile SingleTon2 intance = null;//volatile 保证123的顺序
public static SingleTon2 getInstance(){
if (intance == null){
synchronized (SingleTon2.class){
if (intance == null){
intance = new SingleTon2(); // intance(3) = new(1) SingleTon2()(2)
// 这是一个有顺序的,123,但是cpu会优化顺序变成132
}
}
}
return intance;
}
}
为啥二次判断
- 如果加到外面就效率低,吃独食
- 再次判断是因为获得锁的过程是漫长的,很可能被调度出去了,所以要在判断
本文探讨了Java中的Volatile修饰符,强调其确保变量可见性、顺序性和long/double原子性的特点,同时指出它不会引起线程切换。接着转向单例模式的讨论,解释了为何在实现单例时需要考虑线程安全和效率,提到了饿汉模式和懒汉模式,并分析了双重检查锁定机制的重要性。
532

被折叠的 条评论
为什么被折叠?



