精彩的设计模式盛宴刚刚落下帷幕。三天的时间。真是学习到了非常多。当中,遗留的非常多的问题。今天就谈谈synchronized这个keyword。关于对synchronizedkeyword的思考是从单例模式引发的。

在代码中利用延迟载入,将对象的初始化定义为null值。在须要的时候才去进行对象的构造,getinstance这种方法。

这个就是我们常常说的懒汉式单例模式。

懒汉式单例的出现:

假设将类初始化的过程放到代码运行中,有优点。就是启动快。假设对象实例化过程比較复杂。这样能够提供效率。速度。当用到的时候再去创建对象。可是懒汉式单例模式相同存在一个问题。打个例如说:线程A希望使用SingletonClass,调用getInstance()方法。由于是第一次调用。A就发现instance是null的。于是它開始创建实例。就在这个时候,CPU发生时间片切换。线程B開始运行,它要使用SingletonClass,调用getInstance()方法。相同检測到instance是null——注意,这是在A检測完之后切换的。也就是说A并没有来得及创建对象——因此B開始创建。B创建完毕后,切换到A继续运行,由于它已经检測完了。所以A不会再检測一遍。它会直接创建对象。

这样,线程A和B各自拥有一个SingletonClass的对象——单例失败!

Synchronized同步锁引出:


通过介绍延迟载入再到懒汉式,最终引出了我们今天要讲的主题。那么怎样解决上面一个关于创建对象时,CPU切换的问题呢?事实上方法非常easy。就是将这个GetInstance方法加锁,是要getInstance()加上同步锁。一个线程必须等待另外一个线程创建完毕后才干使用这种方法,这就保证了单例的唯一性。

两个并发线程訪问同一个对象obj中的synchronized修饰的一个方法时,一个时间内仅仅能有一个线程得到运行。即A操作完才干够让B操作,否则B一直处于等待的状态中。也能够说是一种堵塞的状态。

相应代码能够是:

public class SingletonClass { 

  private static SingletonClass instance = null; 

  public synchronized static SingletonClass getInstance() {
if(instance == null) {
instance = new SingletonClass();
}
return instance;
} private SingletonClass() { } }

什么时候用到synchronized?

在编写一个类时,假设该类中的代码可能执行于多线程环境下。那么就要考虑同步的问题。在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java中多线程同步的使用。锁不只能够用到类的实例化,也能够用到静态成员方法的声明中。

synchronized优缺点?

通过它的长处能够看出它的缺点是什么,长处是将解决多线程的问题,避免占用资源,占用多个对象。相对缺点是会锁住某一段程序,别的程序假设须要调用的话就必须等待,降低了速度、效率。有可能产生死锁,导致程序中断。

小结:

之前对于单例模式的了解仅仅是知道它能够用于实例化一个窗口对象,有且仅仅有一个对象被实例化出来。如今学过了J2SE的线程那一章,本来也是晕晕的。不理解这个同步锁。当再一次回想这个单例模式的时候,结合着synchronized的定义,我了解到了非常多,跟之前的学习产生的共鸣。

效果非常好。

关于Javakeywordsynchronized——单例模式的思考的更多相关文章

  1. 从一个小例子引发的Java内存可见性的简单思考和猜想以及DCL单例模式中的volatile的核心作用

    环境 OS Win10 CPU 4核8线程 IDE IntelliJ IDEA 2019.3 JDK 1.8 -server模式 场景 最初的代码 一个线程A根据flag的值执行死循环,另一个线程B只 ...

  2. Android 源码解析:单例模式-通过容器实现单例模式-懒加载方式

    本文分析了 Android 系统服务通过容器实现单例,确保系统服务的全局唯一. 开发过 Android 的用户肯定都用过这句代码,主要作用是把布局文件 XML 加载到系统中,转换为 Android 的 ...

  3. Python 实现单例模式的一些思考

    一.问题:Python中如何实现单例模式 单例模式指一个类只能实例化一个对象. 二.解决方案: 所有资料参考于: http://python.jobbole.com/87294/ https://ww ...

  4. 设计模式-单例模式下对多例的思考(案例:Server服务器)

    前述: 在学习单例模式后,对老师课上布置的课后作业,自然要使用单例模式,但是不是一般的单例,要求引起我的兴趣,案例是用服务器. 老师布置的要求是:服务器只有一个,但是使用这个服务器时候可以有多个对象( ...

  5. GJM : C#设计模式(1)——单例模式

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  6. 设计模式之单例模式——Singleton

                        设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ...

  7. 【白话设计模式四】单例模式(Singleton)

    转自:https://my.oschina.net/xianggao/blog/616385 0 系列目录 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factor ...

  8. 单例模式和angular的services的使用方法

    在现实生活中存在着有这样的特点的一些类: A.这些类只能有一个实例: B.这些能够自动实例化: C.这个类对整个系统可见,即必须向整个系统提供这个实例. 不妨举一个具体的单例模式的例子:比如教室里面的 ...

  9. 【转】单例模式(Singleton)

    首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了, 比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个, 这里就可以通过单例模式来避免两个打印作业同时输 ...

随机推荐

  1. DISCUZ站点DIY后,导致DIY功能失效,无法在前台删除已创建的DIY功能解决的方法

    DISCUZ站点DIY后.导致DIY功能失效,无法在前台删除已创建的DIY功能解决的方法.这是一个常常会遇到的问题.在程序调试过程中常常的会遇到这种问题.这里提供一个自己常常使用的解决的方法,供遇到这 ...

  2. Auto property synthesis will not synthesize property 'delegate'; it will be implemented by its super

    今天在XCode6.3上面重写TabBar的时候,自己定义tabBar的代理遇到的一个问题 在重写tabBar的代理的时候遇到了一个警告. 解决方法: 在.m文件里 警告消失

  3. hdu4870 Rating (高斯消元或者dp)

    Rating Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. 数组进行多少次OP操作,才干有序

    1 题目描写叙述: 有一个数组:2,1,4,3.对于数组,有一种操作op(idx):将该index相应的数字移到首位.比方: op(3):  2 1 43 -> 3 2 1 4 op(1):   ...

  5. android中进程的优先级

    android中进程的优先级

  6. php实现邮箱激活功能

    php实现邮箱激活功能 一.样例 二.文件结构 其中swiftmailer-master是第三方插件,用来发验证邮件 三.核心代码 doAction.php 响应页面 <?php header( ...

  7. Java-MyBatis:MyBatis XML 文件

    ylbtech-Java-MyBatis:MyBatis XML 文件 1.返回顶部 1. Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大, ...

  8. fiddler一些高级用法

    https://my.oschina.net/leejun2005/blog/399108

  9. MobilNnet

    一.参数数量和理论计算量 1.定义 参数数量(params):关系到模型大小,单位通常为M,通常参数用 float32 表示,也就是每个参数占4个字节,所以模型大小是参数数量的 4 倍 理论计算量(F ...

  10. jquery queryBuilder过滤插件的使用

    1.此插件用于过滤搜索的功能,功能强大,可实现复杂条件过滤,单选多选的等条件的过滤.还可以在插件中调用其他插件. 下载地址和文档阅读:http://querybuilder.js.org/ 效果图: ...