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

专业做网站哪里有中信建设有限责任公司龙芳

专业做网站哪里有,中信建设有限责任公司龙芳,app开发公司广州英诺,图片生成网页链接在线单例模式 个人理解:单例模式实际就是通过类加载的方式获取到一个对象,并且保证这个对象在使用中只有一个,不允许再次被创建 一、懒汉模式 1、懒汉模式的基础写法 代码解释: (1)、编写LazySingleton类的…

单例模式

个人理解:单例模式实际就是通过类加载的方式获取到一个对象,并且保证这个对象在使用中只有一个,不允许再次被创建

一、懒汉模式

1、懒汉模式的基础写法

代码解释:
(1)、编写LazySingleton类的时候,需要将成员属性设定为static,这样才会是类属性
(2)、重写构造方法,将其设置为private,这样就防止其他人在new这个对象了,防止该类被重复new

package com.example.sheji.singleton.v1;
public class LazySingletonTest {public static void main(String[] args) throws Exception {LazySingleton instance = LazySingleton.getInstance();LazySingleton instance1 = LazySingleton.getInstance();System.out.println(instance);System.out.println(instance1);}
}class LazySingleton{private static LazySingleton instance;private LazySingleton(){}public static LazySingleton getInstance()  {if(instance == null){instance =  new LazySingleton();}return instance;}
}

执行结果:可以看到两个对象是一样的,懒汉模式已经基本实现。
但这样的写法在多线程环境下是有问题的!
在这里插入图片描述
当我们改为多线程的方式执行就会出现问题,对象居然不一样了

public class LazySingletonTest {public static void main(String[] args) throws Exception {Thread thread1 = new Thread(() -> {LazySingleton instance = LazySingleton.getInstance();System.out.println(instance);});Thread thread2 = new Thread(() -> {LazySingleton instance = LazySingleton.getInstance();System.out.println(instance);});thread1.start();thread2.start();}
}class LazySingleton{private static LazySingleton instance;private LazySingleton(){}public static LazySingleton getInstance()  {if(instance == null){instance =  new LazySingleton();}return instance;}
}

在这里插入图片描述
但如果我们让其中一个线程睡眠200ms呢,会发现对象的值又一样了
在这里插入图片描述
原因如下图,在两个线程都没有休眠的时候,因为执行太快,当第一个线程执行到if(instance == null)里面时,对象还没有new出来,第二个线程也执行到了,所以出现了这种情况
当让第二个线程休眠200ms的时候,第一个线程已经初始化好对象了,第二个线程就不需要初始化了
在这里插入图片描述

2、懒汉模式的升级写法

解释:
(1)、加锁synchronized ,当对象为空时,只允许一个线程先执行,其他线程等待,可以保证对象只被初始化一次
(2)、volatile 关键字,是为了防止指令重排序,防止instance 还没有开辟空间时,先被赋值了

class LazySingleton{private static volatile LazySingleton instance;private LazySingleton(){}public static LazySingleton getInstance()  {if(instance == null){synchronized (LazySingleton.class){if(instance == null){instance =  new LazySingleton();}}}return instance;}
}

测试结果:
在这里插入图片描述

二、饿汉模式

public class HungrySingletionTest {public static void main(String[] args) {
//        HungrySingletion instance1 = HungrySingletion.getInstance();
//        HungrySingletion instance2 = HungrySingletion.getInstance();
//        System.out.println(instance2);
//        System.out.println(instance1);Thread thread = new Thread(() -> {HungrySingletion instance1 = HungrySingletion.getInstance();System.out.println(instance1);});Thread thread1 = new Thread(() -> {HungrySingletion instance2 = HungrySingletion.getInstance();System.out.println(instance2);});thread.start();thread1.start();}
}
class HungrySingletion{private static HungrySingletion instance = new HungrySingletion();private HungrySingletion(){}public static HungrySingletion getInstance() {return instance;}
}

执行结果:
在这里插入图片描述
解释:因为饿汉模式是在利用jvm在加载过程就已经自动初始化好了,所以不论是否使用多线程,都是一个对象

http://www.yayakq.cn/news/634606/

相关文章:

  • 市妇联门户网站平台建设情况天台县建设规划局网站
  • 威海 网站开发程序员 修电脑 做网站
  • 制作微信网站模板wordpress升级崩了
  • 网站备案号 脱离服务商哈尔滨seo网站排名
  • 斗门网站建设wordpress插件在哪
  • 坪山网站建设基本流程设计图片模板
  • 网站建设自评报告wordpress 打赏
  • wordpress多站点 域名邢台县建设局网站
  • 河南住房和城乡建设局网站用于建设教学网站的建站工具有哪些特点
  • 企业网站推广目标绿色调网站
  • 宁波高端网站开发聊城做wap网站找谁
  • wordpress知名中国网站网站域名是什么东西
  • 早期网站开发用的技术有哪些可以做头像的网站
  • 餐饮 公司 网站建设软件工程课程设计课程网站建设
  • 永久免费网站模板怎么去建一个网站
  • 网站后台ftp替换图片怎么做制作商城网站公司
  • 做国外网站赚钱自己的卡盟网站怎么做分站
  • 开发做一个网站需要多少钱网站维护运营主要是做什么的
  • 网站开发建设流程长沙网站建设商城
  • 做网站公司q房网微信视频号推广价格
  • 济南做网站优化磁力下载
  • wordpress订单邮件优化技术服务
  • 网站建设zrhskjWordPress 采集文章 图片
  • 微信网站建设新闻推广计划a设置了短语否定匹配关键词为招聘
  • 建设银行首页 网站河间建设网站
  • 网站没有备案可以做百度推广吗国外黄冈网站推广软件有哪些
  • 去哪网网站设计风格企业做定制网站的好处
  • 网站怎么做域名实名认证在线识图
  • 区域文化网站建设方案天津网站建设索王道下拉
  • 迈网科技 官方网站wordpress前台发文积分