public class LearnSingleton {
private static LearnSingleton instance = new LearnSingleton();
private LearnSingleton() {
}
public static LearnSingleton getInstance() {
return instance;
}
public static int add(int x, int y) {
return x + y;
}
}
public class LearnSingleton {
private static final LearnSingleton instance = new LearnSingleton();
private LearnSingleton() {
}
public static LearnSingleton getInstance() {
return instance;
}
}
public class LearnLazySingleton {
private static LearnLazySingleton instance;
private LearnLazySingleton() {
}
// 存在线程安全问题。假设两个线程同时调用该方法,那么可能导致创建2个LearnLazySingleton对象。
public static LearnLazySingleton getInstance() {
if (instance == null) {
instance = new LearnLazySingleton();
}
return instance;
}
}
3.1 解决懒汉式的线程安全问题
3.1.1 加锁:synchronized(synchronized修饰静态方法)
java复制代码
public class LearnLazySingleton {
private static LearnLazySingleton instance;
private LearnLazySingleton() {
}
public synchronized static LearnLazySingleton getInstance() {
if (instance == null) {
instance = new LearnLazySingleton();
}
return instance;
}
public synchronized static int add(int x, int y) {
return x + y;
}
public static int sub(int x, int y) {
return x - y;
}
}