我们知道单例分为饿汉式、懒汉式,单例在我们开发中经常用到,本篇内容主讲
1、Java 懒汉式单例模式
public class JavaUtils {
private static JavaUtils instance = null;
private JavaUtils() {
}
public static JavaUtils getInstance() {
if (instance == null) {
instance = new JavaUtils();
}
return instance;
}
public void javaTest(){
System.out.println("Java 懒汉式 单例模式");
}
}
2、Kotlin懒汉式单例模式
class KotlinUtils private constructor() {
companion object {
val instance: KotlinUtils by lazy {
KotlinUtils()
}
}
fun kotlinTest() {
println("kotlin 懒汉式 单例模式")
}
}
以上实现的单例
- 优点:延迟到使用时才进行初始化,提高了类加载的性能
- 缺点:非线程安全,多个线程同时访问情况下,会创建多个实例
但是在我们开发中经常需要考虑线程安全的问题,对Java单例一般使用双重检验锁,kotlin中也提供了线程安全的实现方式
3、Java 同步懒汉式单例模式
public class JavaSyncUtils {
private volatile static JavaSyncUtils instance = null;
private JavaSyncUtils() {
}
public static JavaSyncUtils getInstance() {
if (instance == null) {
synchronized (JavaSyncUtils.class){
if (instance==null){
instance = new JavaSyncUtils();
}
}
}
return instance;
}
public void javaTest(){
System.out.println("Java 懒汉式 单例模式-双重检验锁");
}
}
4、Kotlin同步懒汉式单例模式
class KotlinSyncUtils private constructor() {
companion object {
val instance: KotlinSyncUtils by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
KotlinSyncUtils()
}
}
fun kotlinTest() {
println("kotlin 懒汉式 单例模式-双重检验锁")
}
}
mode = LazyThreadSafetyMode.SYNCHRONIZED kotlin已经对同步安全进行封装
同步单例:
- 优点:1、延迟到使用时才进行初始化,提高了类加载的性能、2、在创建对象的语句块中使用了同步锁synchronized,保证线程安全的同时,降低了锁的作用范围
- 缺点:需要1-2次的空判断
5、单例调用测试
JavaUtils.getInstance().javaTest()
JavaSyncUtils.getInstance().javaTest()
println()
KotlinUtils.instance.kotlinTest()
KotlinSyncUtils.instance.kotlinTest()
Java 懒汉式 单例模式
Java 懒汉式 单例模式-双重检验锁
kotlin 懒汉式 单例模式
kotlin 懒汉式 单例模式-双重检验锁