开课中国  |  [Investor Relations]   |  官方微博

广州.NET培训中心

美国上市公司 · 亿元级外企.NET培训企业

  • 达内.net培训班讲解饿汉式与懒汉式

    发布:it      来源:部分摘自博客园      时间:2017-07-06        

  • 为什么在synchronized代码块中又进行了一次 single是否为null的判断呢?有这么一种情况就是:同时有2个或者n个线程同时进入 geInstance(), 这时候它们同时进行 single是否为null的判断,所以广州达内.net培训机构老师都进入了 if 代码块内,因为 synchronized只允许单个线程进入,所以有 n-1个线程在synchronized代码块外进行等待。

  • 为什么在synchronized代码块中又进行了一次 single是否为null的判断呢?有这么一种情况就是:同时有2个或者n个线程同时进入 geInstance(), 这时候它们同时进行 single是否为null的判断,所以广州达内.net培训机构老师都进入了 if 代码块内,因为 synchronized只允许单个线程进入,所以有 n-1个线程在synchronized代码块外进行等待。

    当第1个进入synchronized代码块的线程实例化出 single对象时,synchronized代码块会把后面等待的其它线程依次放进来,这时候达内.net培训老师single的实例已经被第1个进入的线程实例化了,所以还要进行依次 single的是否为null的判断,这是必须要进行的,不然就会产生多个实例。

    饿汉式天生就是线程安全的,直接用于多线程不会出现问题。实现代码:

    public class Single {

    private static final Single single = new Single();

    private Single(){} // 构造方法私有化

    public static Single getInstance() {

    return single;

    }

    }

    懒汉式:懒汉式本身就是非线程安全的,下面达内.net培训机构老师的例1展示了非线程安全的懒汉式,例2,3,4是实现懒汉式线程安全的3中方式。

    1. 懒汉式(一定存在线程安全问题)

    这里广州达内.net培训老师在单线程状态下,这个懒汉式的单例可以正常工作,但在多线程环境下,仍然能产生多个实例。这就不符合最初的要求了,可以考虑加入锁的机制。

    2. 懒汉式(在方法上进行 synchronized限制)

    3. 懒汉式(双检测锁机制)

    该解决方案可以避免每一次获取实例都要进行排队获取,一旦single被实例化之后,就永远不会进入synchronized代码块内。这时候对于系统的性能就不会产生影响,只是在第1次实例化的时候会对系统性能产生影响。

    当外部程序想要获取Single类的实例的时候,会首先判断一下 single 实例是否为null,然后进行线程控制代码块(synchronized 在同一时刻最多只有一个线程执行该段代码),然后内部又进行了一下 single 实例的判断。然后才进行single实例的实例化操作。

    好了,以上就是达内.net培训老师分享的内容,想要了解专业.net培训机构哪家强吗?在业界达内培训学校确实是个不错的选择,想知道达内.net培训多少钱吗?还有更多关于培训机构方面的知识,就来关注达内培训学校吧!

    “就业季”,来达内学.net培训,为你寻一份不错的工作!

    扫码可进入报名免费课程试听!

    达内.net培训


  • 上一篇:.net培训哪里口碑好? 国内有哪6大移动应用开发SDK?

    下一篇:达内.net培训介绍四大IDisposable释放诀窍!

2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56