浅谈 java 单例

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


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

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

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

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

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

2、懒汉式


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

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

3、加锁


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

4、减小锁的粒度:


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


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 前言 单例(Singleton)应该是开发者们最熟悉的设计模式了,并且好像也是最容易实现的——基本上每个开发...
    Java架构互联网大数据阅读 199评论 0 0
  • 前言 前几天无意中看到一篇文章,讲到了老生常谈的单例,抱着复习一下的心态点了进去,还是那些熟悉的内容,可是却发现自...
    实例波阅读 407评论 0 3
  • @TOC 设计模式介绍 1)设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某...
    小小一技术驿站阅读 243评论 0 1
  • 1. 实现单例模式 饿汉模式和懒汉模式单例模式根据实例化时机分为饿汉模式和懒汉模式。饿汉模式,是指不等到单例真正使...
    aaron1993阅读 230评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,579评论 16 22