一 双重校验锁
java
public class SingleDemo {
private volatile static SingleDemo instance;
private SingleDemo() {
}
public static SingleDemo getInstance() {
if (instance == null) {
synchronized (SingleDemo.class) {
if (instance == null) {
instance = new SingleDemo();
}
}
}
return instance;
}
}
kotlin
class SingletonDemo private constructor() {
companion object {
val instance: SingletonDemo by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
SingletonDemo()
}
}
}
二 静态内部类式
java
public class SingleDemo {
private static class SingleHolder{
static final SingleDemo INSTANCE = new SingleDemo();
}
public static SingleDemo getInstance(){
return SingleHolder.INSTANCE;
}
}
kotlin
class SingletonDemo private constructor() {
companion object {
val instance = SingletonHolder.holder
}
private object SingletonHolder {
val holder = SingletonDemo()
}
}