广州.NET培训
达内广州.NET培训中心

18589266248

热门课程

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

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

为什么在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释放诀窍!

电脑编程难学吗?达内教你上手就不难!

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

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

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

选择城市和中心
贵州省

广西省

海南省