当前位置: 首页 > news >正文

网站源码下载 用户注册天津建站服务

网站源码下载 用户注册,天津建站服务,WordPress标题原创插件,广州黄埔做网站的公司目录 一、什么是单例模式#xff1f; 二、单例模式有什么作用#xff1f; 三、常见的创建单例模式的方式 1、饿汉式创建 2、懒汉式创建 3、DCL#xff08;Double Checked Lock#xff09;双检锁方式创建 3.1、synchronized 同步锁的基本使用 3.2、使用 DCL 中存在的疑…目录 一、什么是单例模式 二、单例模式有什么作用 三、常见的创建单例模式的方式 1、饿汉式创建 2、懒汉式创建 3、DCLDouble Checked Lock双检锁方式创建 3.1、synchronized 同步锁的基本使用 3.2、使用 DCL 中存在的疑问 3.2.1、为什么不直接在静态方法上加 synchronized 关键字直接上锁 3.2.2、为什么 synchronized 代码块中锁的是当前类对象为什么不是 this 一、什么是单例模式 单例模式是一种创建型设计模式它确保类只有一个实例并提供全局访问点让外部代码可以访问该实例。 在 Java 中可以使用单例模式来实现一些全局性的操作例如配置文件管理、线程池管理、数据库连接池管理等等。这些操作只需要在程序运行的时候创建一次实例在整个程序生命周期内都可以通过该实例来访问这些全局资源。 二、单例模式有什么作用 避免对不需要的对象进行重复的创建从而节省系统资源。提供一个全局可访问的唯一实例方便对该实例进行管理和操作。确保类只有一个实例存在避免出现因为实例化多个对象而产生的各种问题例如状态不一致、资源争抢等问题。提供一种常用的解决方案能够帮助程序员更好地组织和管理代码。 三、常见的创建单例模式的方式 1、饿汉式创建 //线程安全 class HungrySingleton {//在一开始就创建完成对象private static HungrySingleton hungrySingleton new HungrySingleton();//私有的构造方法别的类中无法对该类进行创建private HungrySingleton() {}//使用静态方法直接使用 类名. 的形式就可以调用该方法public static HungrySingleton getInstance() {return HungrySingleton.hungrySingleton;} } 2、懒汉式创建 //线程不安全 class LazySingleton {//一开始命名了对象但是并没有创建private static LazySingleton lazySingleton;private LazySingleton() {}//当存在多个线程调用该方法就会导致创建的对象不一致。public static LazySingleton getInstance() {if (lazySingleton null) {lazySingleton new LazySingleton();}return lazySingleton;} } 3、DCLDouble Checked Lock双检锁方式创建 //基于懒汉式进行双检锁线程安全 class DCLSingleton {//需要使用 volatile 关键字防止指令重排因为对象的创建过程中存在着半初始化过程private static volatile DCLSingleton dclSingleton;private DCLSingleton() {}public static DCLSingleton getInstance() {//第一步先进行判断对象是否为空避免了所有线程访问直接就去竞争锁if (dclSingleton null) {//第二步对一个线程加锁其他线程等待synchronized (DCLSingleton.class) {/*第三步会继续判断对象是否创建是为了避免当时有多个线程到达第二步的等待阶段一旦对象创建完成锁被释放此时其他的线程就会获取锁如果不判断就会创建新的对象*/if (dclSingleton null) {dclSingleton new DCLSingleton();}}}return dclSingleton;} } 3.1、synchronized 同步锁的基本使用 /*** synchronized的不同使用地点的不同含义。* 要保证锁的对象是不会变化的。*/public class SynchronizedTest {//1.使用在静态方法上此时锁的对象为当前类对象 SynchronizedTest.classpublic static synchronized void Test(){}//2.使用在非静态方法上此时锁的对象是当前类的对象 thispublic synchronized void Test1(){Object onew Object();//3.synchronized代码块此时锁的对象是括号中的对象synchronized(o){}} } 3.2、使用 DCL 中存在的疑问 3.2.1、为什么不直接在静态方法上加 synchronized 关键字直接上锁 /* 在方法上直接使用 synchronized 关键字是对整个方法都加锁了就算对象已经创建也会使得每个线程来访问都要进行同步操作降低效率public static synchronized DCLSingleton getInstance(){if(dclSingletonnull){dclSingletonnew DCLSingleton();}return dclSingleton;}*/ 3.2.2、为什么 synchronized 代码块中锁的是当前类对象为什么不是 this 在Java中synchronized关键字可以用于不同的锁定对象。如果我们在DCL中使用当前类的对象 this 作为锁定对象那么每个线程都会尝试获取该锁这样就无法实现同步。因为每个线程都会创建自己的对象实例而不是共享同一个实例。 通过在synchronized代码块中使用当前类对象作为锁定对象可以保证在多线程环境下只有一个线程能够进入该代码块从而实现对象的单例模式。这是因为类对象是唯一的所有线程都可以通过该对象来同步访问代码块。
http://www.tj-hxxt.cn/news/136084.html

相关文章:

  • dw网站模版wordpress如何把文章
  • 北京住房城乡建设厅网站南京网站开发南京乐识赞
  • 网站设计与网页制作岗位招聘信息种植园网站模板
  • 已有的网站如何做排名优化山东网站建设都有那些
  • 建站网站模板做网站用什么面板好
  • 企业官方网站建设推广软件哪个好
  • 小公司网站用什么服务器划算深圳建网站制作维护
  • 建设网站需要什么设备智能网站建设加工
  • wap网站建设设计西安企业查询
  • 电影订票网站怎么做动漫网站设计模板
  • 专业做网站公司怎么样如何找推广平台
  • 免费的发帖收录网站上海网站推广方法
  • 手机网站页面设计建设一个电子商务网站的基本步骤
  • 如何给网站做下载附件建设网站郑州
  • 电子商务网站开发技术便宜的购物网站排名
  • 做网站挂广告赚多少钱网络推广的优势
  • 网站建设是在商标哪个类别网站代码特效广告
  • 网站首页布局设计原理农产品电子商务网站开发
  • 网站开发术语wordpress深度开发
  • 网站动态域名广州网站设计总部
  • 网站开发公司能不能去网站网站建设公司上海
  • 网站组织结构图app一键生成平台免费软件
  • 开源cms建站foxplayer wordpress
  • 网站开发视频教程全国企业工商信息查询系统
  • 临沂seo网站推广淘宝客网站如何做排名
  • 嘉兴制作网站企业个人网站模板怎么用
  • 建网站 方法中国纵横168网站建设系统
  • 打开网站总显示建设中甘肃网站seo技术厂家
  • 网站建设人员组织社区cms
  • 微信公众号运营要求天津seo建站