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

吕梁市住房与城乡建设厅网站电子商务网站建设的概要设计

吕梁市住房与城乡建设厅网站,电子商务网站建设的概要设计,淡水网站建设公司,百度h5制作软件下载描述 保证一个类只有一个实例,并且提供一个全局访问点 场景: 重量级的对象,不需要多个实例,如线程池,数据库连接池 实现 1. 懒汉模式 延迟加载的方式 只有在真正使用的时候,才开始实例化线程安全问题…

描述

保证一个类只有一个实例,并且提供一个全局访问点

场景:

重量级的对象,不需要多个实例,如线程池,数据库连接池

实现

1. 懒汉模式
  • 延迟加载的方式 只有在真正使用的时候,才开始实例化
  • 线程安全问题
  • double check 加锁优化
  • 编译器(JIT) cpu有可能对指令进行重排序,导致使用到尚未初始化的实例,可以通过添加volatile关键字,对于volatile修饰的字段,可以防止指令重排
class LazySingleton{private volatile static LazySingleton instance;private LazySingleton(){}public static LazySingleton getInstance(){if (instance == null) {synchronized (LazySingleton.class) {if (instance == null) {instance = new LazySingleton();// 1.分配空间 2.初始化 3.引用赋值}}}return instance;}
}

备注:
javap -v XXX.class可以看class文件的字节码

2. 饿汉模式
  • 类加载的初始化阶段就完成了实例的初始化,本质上是基于JVM类加载机制,保证实例的唯一性
  • 类加载的过程:
    • 加载二进制数据到内存中,生成对应的class数据结构
    • 连接:验证、准备(给类的静态成员变量赋默认值)、解析
    • 初始化:给类的静态变量赋值
      注意:
    • 只有在真正使用对应的类时,才会触发初始化
class HungrySingleton{private static final long serialVersionUID = 4416608876659526091L;private static HungrySingleton instance = new HungrySingleton();private HungrySingleton(){}public static HungrySingleton getInstance(){return instance;}
}
3. 静态内部类
  • 本质上是利用类的加载机制保证线程安全
  • 只有在实际使用的时候,才会触发类的初始化,所以也是懒加载的一种形式
class InnerClassSingleton{private static class InnerClassHolder{private static InnerClassSingleton instance = new InnerClassSingleton();}private InnerClassSingleton(){}public static InnerClassSingleton getInstance(){return InnerClassHolder.instance;}
}
4. 反射攻击实例
public class HungrySingletonTest {public static void main(String[] args) throws Exception {HungrySingleton instance = HungrySingleton.getInstance();HungrySingleton instance1 = HungrySingleton.getInstance();System.out.println(instance);System.out.println(instance1);//        // 反射获取实例Constructor<HungrySingleton> declaredConstructor = HungrySingleton.class.getDeclaredConstructor();declaredConstructor.setAccessible(true);HungrySingleton instance2 = declaredConstructor.newInstance();System.out.println(instance2);  } 
}class HungrySingleton{ private static HungrySingleton instance = new HungrySingleton();private HungrySingleton(){if (instance != null) {throw new RuntimeException("单例不允许创建多个实例!");}}public static HungrySingleton getInstance(){return instance;} 
}
5. 枚举

枚举类型支持反序列化的操作 并且不能用反射攻击
其他类型支持反序列化操作案例

public class HungrySingletonTest {public static void main(String[] args) throws Exception {HungrySingleton instance = HungrySingleton.getInstance();HungrySingleton instance1 = HungrySingleton.getInstance();System.out.println(instance);System.out.println(instance1);//        // 反射获取实例
//        Constructor<HungrySingleton> declaredConstructor = HungrySingleton.class.getDeclaredConstructor();
//        declaredConstructor.setAccessible(true);
//        HungrySingleton instance2 = declaredConstructor.newInstance();
//        System.out.println(instance2);// 序列化HungrySingleton instance2 = HungrySingleton.getInstance();
//        ObjectOutputStream oss = new ObjectOutputStream(new FileOutputStream("testSerializable"));
//        oss.writeObject(instance2);
//        oss.close();ObjectInputStream ois = new ObjectInputStream(new FileInputStream("testSerializable"));HungrySingleton o = (HungrySingleton) ois.readObject();ois.close();System.out.println(o == instance2);}}class HungrySingleton implements Serializable{private static final long serialVersionUID = 4416608876659526091L;private static HungrySingleton instance = new HungrySingleton();private HungrySingleton(){if (instance != null) {throw new RuntimeException("单例不允许创建多个实例!");}}public static HungrySingleton getInstance(){return instance;}public Object readResolve() throws ObjectStreamException {return getInstance();}
}
http://www.yayakq.cn/news/834674/

相关文章:

  • 做动物网站的原因自己怎么建网站卖东西
  • 网站里面的图片做桌面不清晰学校网站设计流程
  • 郑州公司网站建设哪家好网站设置怎么删除
  • 爱网站网站查询网站开发与技术分析
  • 柳州住房城乡建设厅官方网站百度竞价广告投放
  • 企业手机网站建设平台博物馆网站建设情况说明
  • 免费拿项目做的网站东莞高端品牌网站建设
  • 2018企业网站优化应该怎么做网站h1标签怎么做
  • 企业网站自助建站上海东莞常平学校网站建设
  • 如何申请个人网站wordpress 红色模版
  • 开发网站五个阶段手机优化怎么得100分
  • 织梦做企业网站教程php mysql做网站
  • 鸿运通网站建设手表网站哪家好
  • 云服务器网站建站国外做彩票网站违法吗
  • 网站收录查询代做效果图网站哪家好
  • 龙岗商城网站建设教程作文网推荐
  • 建设网站的知识自己怎么制作一个公众号
  • 建设网站昌都地区智能网站搭建
  • 网站开发工作程序怎么写asp.net个人网站模板
  • 文昌网站建设 myvodo浏览器禁止网站怎么做
  • 学院网站建设需求分析目录东营企业网站建设
  • 建设银行员工学习网站wordpress仿论坛主题
  • 福建省住房与城乡建设部网站网站建设方案实验报告
  • 百度统计网站速度诊断工具防封电销系统
  • 做传销网站的静态网站用什么做最快
  • 企业网站建设 新闻宣传wordpress怎么换主题
  • 常州制作公司网站做内衣的网站
  • 珠海网站制作推广公司哪家好怎么做一个免费的网站
  • 大连网站建设选高和科技九台网站
  • 前端网页设计流程优化神马网站关键词排名价格