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

惠州惠阳网站建设福州建设企业网站

惠州惠阳网站建设,福州建设企业网站,阜宁县住房与城乡建设局网站,旅游网站 系统概念 保证指定的类只有一个实例#xff0c;不能创建出其他的实例 实现方式 1.饿汉模式 1.1 代码展示 package 设计模式;/*** Created with IntelliJ IDEA.* Description:* User: wuyulin* Date: 2023-07-28* Time: 11:28*///单例模式#xff08;饿汉模式#xff09; //保证…概念 保证指定的类只有一个实例不能创建出其他的实例 实现方式 1.饿汉模式 1.1 代码展示 package 设计模式;/*** Created with IntelliJ IDEA.* Description:* User: wuyulin* Date: 2023-07-28* Time: 11:28*///单例模式饿汉模式 //保证Singleton类只有一个实例 //Singleton类中instance对象的创建时机在Singleton类被jvm加载的时候创建Singleton类会在第一次使用的时候被加载不一定是程序一启动的时候 class Singleton{//带有static的是类属性由于每个类的类对象是单例的所以类对象的属性static也是单例的private static Singleton instancenew Singleton();public static Singleton getSingleton(){return instance;} //当多个线程调用getSingleton方法相当于多个线程读取同一个变量这是线程安全的//由于要规定在类的外部不能实例化Singleton类型的对象所以要把构造函数改为私有的这样就在类外部就不能实例化Singleton类的对象了private Singleton(){}; } public class Deom1 {public static void main(String[] args) {Singleton s1Singleton.getSingleton();Singleton s2Singleton.getSingleton();//Singleton s3new Singleton();System.out.println(s1s2);//System.out.println(s1s3);} }1.2 Singleton类中instance对象的创建时机 Singleton类中instance对象的创建时机在Singleton类被jvm加载的时候创建Singleton类会在第一次使用的时候被加载不一定是程序一启动的时候 1.3 控制Singleton类的实例只有一个的核心步骤 1.3.1 在类属性static中进行创建带有static的是类属性由于每个类的类对象是单例的所以类对象的属性static也是单例的 1.3.2 提供一个获取这个对象的接口方便在类外调用这个对象 1.3.3 由于规定在类的外部不能实例化Singleton类型的对象所以要把构造函数改为私有的这样就在类外部就不能实例化Singleton类的对象了 1.4线程安全问题 饿汉模式实现单例模式是没有线程安全问题的因为多个线程调用getSingleton方法相当于多个线程读取instance引用的值没有涉及到多个线程进行修改所以没有线程安全问题 2.懒汉模式 2.1代码展示 package 设计模式;/*** Created with IntelliJ IDEA.* Description:* User: wuyulin* Date: 2023-07-28* Time: 12:05*/ //单例线程懒汉模式 //SingletonLazy类中instance对象创建的时机在第一次调用getInstance方法时创建 class SingletonLazy{private static volatile SingletonLazy instancenull; //加上volatile避免内存可见性问题public static SingletonLazy getInstance(){if(instancenull){ //第一个条件判断是否需要加锁synchronized(SingletonLazy.class){ //第二个条件用于判断是否要创建对象if(instancenull){instancenew SingletonLazy();}}}return instance;}private SingletonLazy(){}; } public class Demo2 {public static void main(String[] args) {SingletonLazy s1SingletonLazy.getInstance();SingletonLazy s2SingletonLazy.getInstance();System.out.println(s1s2);//SingletonLazy s3new SingletonLazy();}}2.2SingletonLazy类中instance对象创建的时机 在第一次调用getInstance方法时创建 2.3控制SingletonLazy类的实例只有一个的核心步骤 2.3.1在类属性static中进行创建声明带有static的是类属性由于每个类的类对象是单例的所以类对象的属性static也是单例的 2.3.2 提供一个实例化这个对象并返回这个对象的接口 2.3.3 由于规定在类的外部不能实例化Singleton类型的对象所以要把构造函数改为私有的这样就在类外部就不能实例化Singleton类的对象了 2.4 线程安全问题 懒汉模式存在线程安全问题 当多个线程判断instancenull可能多个线程都会判断为null值导致创建多个对象所以要对getInstance方法中的代码进行加锁将判断和创建对象两个操作变成一个原子性的操作 但实际上是需要一直加锁的吗不是的只有我们准备实例化instance对象的时候会出现线程安全问题当创建成功后instancenull此时多个线程都是获得instance引用的值不存在线程安全问题也就不需要加锁了所以要判断一下是否需要加锁当instance为null表示当前第一次准备创建该对象此时加锁控制只有第一个线程创建对象其余线程返回instance的值instance不为null说明instance对象已经创建成功多个线程都只是读取instance的值不存在线程安全问题所以不用加锁 加了锁以后该程序其实还有内存可见性问题因为在第一次调用getInstance方法创建对象后第二次去读取instance的值你不一定能读到最新的instance的值原因请看线程安全问题内存可见性所以要在instance变量声明的时候加上volatile易变的解决内存可见性问题 使用volatile不仅仅是为了预防出现内存可见性问题还要解决指令重排序问题指令重排序问题请看线程安全问题指令重排序
http://www.hkea.cn/news/14420772/

相关文章:

  • 视频网站 阿里云广州大学生网页设计大赛
  • 一家公司多个网站备案怎么做网站广告代理商
  • 创意品牌网站网站建设加推广需要多少钱
  • 网站优化包括安卓内核级优化神器
  • 辽宁省建设机械协会官方网站希尔顿酒店网络营销案例
  • 指定图片做logo网站青岛团购网站建设
  • 全栈网站开发流程图荥阳高端网站建设
  • 浙江怎么制作网站网站seo公司哪家好
  • 新开三端互通传奇网站衡阳县建设局网站
  • 长沙网站开发公司承德哪里做网站
  • 淄博个人承接网站制作网址浏览大全
  • 大良网站智能推广机构网页设计师主要工作内容
  • 付网站建设费会计分录富国基金公司网站
  • 路由器 做网站做网站可以找设计公司吗
  • 无锡网站建济南网站推广服务
  • 陕西建设注册中心网站wordpress keyword
  • 品牌网站设计有哪些建议网络团队
  • 网站建设a2345c 网站开发中间层怎么写
  • 怎么做收费网站手机门户WordPress主题
  • 网店的网站设计方案广告主广告商对接平台
  • 外包软件西安seo服务
  • 做网站视频存储驻马店公司做网站
  • 网站服务器架设中美俄最新军事新闻
  • 中国建设银行注册网站体外产品的研发网站如何建设
  • 网站建设dede什么网站需要经营性备案
  • 企业建立网站的原因合肥网络推广公司乐蜂
  • 网站建设做网站好吗三明住房建设局网站
  • 简洁手机导航网站模板下载安装重大违法建设项目举报网站
  • 国产成年做视频网站wordpress文章怎么写
  • 网站建设优化服务信息招商外包公司