美文网首页
浅谈 java 单例

浅谈 java 单例

作者: peterXpq | 来源:发表于2020-11-23 15:13 被阅读0次

1、单例 饿汉式 为啥是线程安全的?

说明:static 变量 singleTon ,被所有对象共享,在内存中只有一个副本,在类初次加载的时候才会初始化

问题:在没有使用这个对象的情况下就加载到内存是一种很大的浪费。

这里有一个很好能说明静态修饰和非静态修饰的说明:

非静态方法调用静态方法就没问题,是因为静态方法在类加载的时候就已经初始化了;

静态方法内调用非静态变量或者方法就报错,是因为,不确定非静态的方法到底有没有完成初始化

2、懒汉式

说明:这种方法在调用Singleton.getInstance()时才会创建对象,起到了延迟加载的作用。

问题:线程不安全,假如有两个线程同时去访问,那么会得到两个不同的实例,避免了上面的提前创建好实例,造成的资源浪费

3、加锁

说明:线程安全,但效率低下,锁住了整个方法

4、减小锁的粒度:

问题:假设2个线程可以同时进入到 if 语句中,线程A实例化对象返回,线程B不用经过判断直接再次实例化对象,并返回另一个对象,为了解决这个问题,引入了臭名昭著的 双重锁机制

相关文章

网友评论

      本文标题:浅谈 java 单例

      本文链接:https://www.haomeiwen.com/subject/pqcviktx.html