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

青海商会网站建设公司开封网站设计价格

青海商会网站建设公司,开封网站设计价格,上海站有云网络科技有限公司,郑州网站推广流程文章目录定义类图Java经典实现懒汉Lazy Mode#xff1a;饿汉Eager Mode#xff1a;在饿汉下的多线程案例在懒汉下的多线程案例总结定义 单例模式#xff08;单件模式#xff09;确保一个类只有一个实例#xff0c;并提供一个全局访问点。——HeadFirst 单例模式通过过防… 文章目录定义类图Java经典实现懒汉Lazy Mode饿汉Eager Mode在饿汉下的多线程案例在懒汉下的多线程案例总结定义 单例模式单件模式确保一个类只有一个实例并提供一个全局访问点。——HeadFirst 单例模式通过过防止外部实例化和修改来控制创建的对象的数量。 关键点 私有构造函数没有其他类可以实例化一个新对象。私有引用-没有外部修改。Public static getInstance方法是唯一可以获取对象的地方。 问为什么单例模式能确保实例独一无二 答因为单例模式没有公开的构造器构造器是私有的因此他人无法自己创建实例对象。而且他人想获取实例必须通过调用getInstance静态方法得到实例实例也许是调用时创建的也许是之前已经创建好的。 类图 Java经典实现 私有构造器、一个静态方法、一个静态变量。 懒汉Lazy Mode public class Singleton{// 使用一个静态变量记录Stingleton的唯一实例private static Singleton uniqueInstance;// 这里是其他有用的实例化变量// 私有构造方法private Singleton(){} public static Singleton getInstance(){if(uniqueInstance null){uniqueInstance new Singleton();}return uniqueInstance;}// 其他有用的方法 }饿汉Eager Mode public class Singleton2 {// 使用一个静态私有变量记录Stingleton的唯一实例private static Singleton2 uniqueInstance new Singleton2();// 这里是其他有用的实例化变量// 私有构造方法private Singleton2(){}public static Singleton2 getInstance(){return uniqueInstance;}// 其他有用的方法 }在饿汉下的多线程案例 单例类GlobalNum.java public class GlobalNum {private static GlobalNum gnnew GlobalNum();private int num0;public static GlobalNum getInstance(){return gn;}public synchronized int getNum() //加锁{return num; //返回访问次数} }主方法SingleMain.java class NumThread extends Thread{private String threadName;public NumThread(String name){threadNamename;}public void run(){ GlobalNum gnObjGlobalNum.getInstance();for (int i 0; i 5; i) {System.out.println(threadName第gnObj.getNum()次访问);try {this.sleep(1000);} catch (Exception e) {// TODO: handle exceptionSystem.out.println(错误);} }} }public class SingleMain { //测试单件模式public static void main(String[] args) {// TODO Auto-generated method stubNumThread thread1new NumThread(线程1);NumThread thread2new NumThread(线程2);thread1.start();thread2.start();} }JDK8运行结果 线程1第2次访问 线程2第1次访问 线程1第3次访问 线程2第4次访问 线程1第5次访问 线程2第6次访问 线程1第7次访问 线程2第8次访问 线程1第9次访问 线程2第10次访问在懒汉下的多线程案例 getInstance方法添加synchronized关键字防止不同线程创建多个实例对象从而违反单例模式。 public class GlobalNum {private static GlobalNum globalNum;private int num0;// getInstance方法添加synchronized关键字防止创建多个实例public static synchronized GlobalNum getInstance(){if(globalNumnull){globalNum new GlobalNum();return globalNum;}return globalNum;}public synchronized int getNum() //加锁{return num; //返回访问次数} }主方法SingleMain.java 同上输出结果 线程1第1次访问 线程2第2次访问 线程1第4次访问 线程2第3次访问 线程1第6次访问 线程2第5次访问 线程1第7次访问 线程2第8次访问 线程1第9次访问 线程2第10次访问如果上述getInstance不添加synchronized则会造成输出 线程1第1次访问 线程2第1次访问 线程1第2次访问 线程2第2次访问 线程1第3次访问 线程2第3次访问 线程1第4次访问 线程2第4次访问 线程1第5次访问 线程2第5次访问————————————— 上述懒汉下的多线程案例虽然达到预想效果但是存在缺陷为了防止多个线程创建多个对象给getInstance添加synchronized但实际上只有第一次执行getInstance方法才需要真正的同步当已经创建好对象时后续无需在同步getInstance方法导致后续每次调用getInstance同步变成累赘性能资源浪费。 改进使用双重检查加锁减少使用同步。 添加volatile及synchronized同步块 public class GlobalNum {private static volatile GlobalNum globalNum;private int num0;public static GlobalNum getInstance(){if(globalNumnull){synchronized(GlobalNum.class){if(globalNumnull)globalNum new GlobalNum();}}return globalNum;}public synchronized int getNum() //加锁{return num; //返回访问次数} }总结 单例模式确保一个程序中的一个类只有一个实例。单例模式提供访问这个实例的全局访问点。Java实现单例模式私有构造器、一个静态变量、一个静态方法。确定性能资源的限制后在多线程情况下谨慎选择合适的方法实现单例模式。 参考 HeadFirst设计模式、https://www.programcreek.com/2011/07/java-design-pattern-singleton/
http://www.hkea.cn/news/14458739/

相关文章:

  • 怎么在百度上能搜到自己的网站百度商品推广平台
  • 南京的电商网站设计传奇来了网页版
  • 网站费用清单做网站要会写什么软件
  • 元谋县建设局网站网站开发的软硬件环境
  • 手工艺品网站建设目的免费手机网站商城
  • 长沙 网站设计 公司清理wordpress头部
  • 营销网站科技微信里面的小程序
  • 微信做网站支付工具网站怎么建设可以发图评论
  • 成都市建设网站首页用vue做pc端网站好吗
  • 住房和城乡建设部的网站网络架构师报考条件
  • 石家庄做网站制作wordpress评论加头像
  • 网站建设计划方案网站开发 瀑布结构
  • 自动做图在线网站开发微信小程序收费吗
  • 快速建站公司有哪些小程序制作需要什么技术
  • 杭州pc网站建设方案东莞品牌网站制作公司
  • 手机号注册网站公司电子版简介模板
  • 心连网网站企业年金怎么查
  • title 芜湖网站制作怎样备份网站数据库
  • 建设装饰网站化妆培训学校网站源码 下载
  • 长丰县重点工程建设管理局网站本科自考报名的时间
  • 做网站素材wordpress hook 数据库
  • 兰溪高端网站建设公司视频下载软件
  • 论坛网站开发平台怎么用花生壳做网站
  • wordpress oa教程新手怎么做网站优化
  • 加强门户网站建设广州白云学校网站建设
  • 浙江省住房建设厅继续教育网站免费空间做淘宝客网站
  • 优化网站关键词app安装官方免费下载
  • 做网站需要买空间么 服务器乐山网站开发
  • 网站标题关键词怎么做小程序开发费用是多少
  • 网站域名设计推荐系统开发项目管理