单例模式

2021-01-26  本文已影响0人  浩仔_Boy

kotlin常用写法

class Single {

    companion object {
        val instance: Single by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
            Single()
        }
    }
    fun getWidth(): Int {
        return 1280
    }
}

Java常用写法(双检索的方式)

 public class Single {

    /**
     * 加上volatile的作用,防止指令重排,保证多线程访问时的安全性
     * 在JVM中,new一个对象操作会做下面三件事:
     * 1.给new的Single对象分配空间
     * 2.调用Single的构造函数来初始化对象
     * 3.将single指向第一步分配的空间
     * 但是因为JVM存在指令重排的优化,存在无法保证123顺序执行的情况。
     * 有可能会导致线程B调用getInstance()时发现single非空,但是却未初始化,从而出现问题
     */
    private volatile static Single single;

    public Single() {

    }

    public static Single getInstance() {
        if (single == null) {
            synchronized (Single.class) {
                if (single == null) {
                    single = new Single();
                }
            }
        }
        return single;
    }

}

上一篇 下一篇

猜你喜欢

热点阅读