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

看网站的关键词东莞seo技术培训

看网站的关键词,东莞seo技术培训,网页设计网站制作公司,怎么获取免费的网站域名我是兔兔rabbit#xff0c;关注我吧#xff0c;给自己每天的进步找一个机会和理由#xff0c;不要被无效信息淹没 单例#xff08;Singleton#xff09; Intent 确保一个类只有一个实例#xff0c;并提供该实例的全局访问点。 Class Diagram 使用一个私有构造函数、一… 我是兔兔rabbit关注我吧给自己每天的进步找一个机会和理由不要被无效信息淹没 单例Singleton Intent 确保一个类只有一个实例并提供该实例的全局访问点。 Class Diagram 使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 私有构造函数保证了不能通过构造函数来创建对象实例只能通过公有静态函数返回唯一的私有静态变量。 Implementation Ⅰ 懒汉式-线程不安全 以下实现中私有静态变量 uniqueInstance 被延迟实例化这样做的好处是如果没有用到该类那么就不会实例化 uniqueInstance从而节约资源。 这个实现在多线程环境下是不安全的如果多个线程能够同时进入 if (uniqueInstance null) 并且此时 uniqueInstance 为 null那么会有多个线程执行 uniqueInstance new Singleton(); 语句这将导致实例化多次 uniqueInstance。 public class Singleton {private static Singleton uniqueInstance;private Singleton() {}public static Singleton getUniqueInstance() {if (uniqueInstance null) {uniqueInstance new Singleton();}return uniqueInstance;} }Ⅱ 饿汉式-线程安全 线程不安全问题主要是由于 uniqueInstance 被实例化多次采取直接实例化 uniqueInstance 的方式就不会产生线程不安全问题。 但是直接实例化的方式也丢失了延迟实例化带来的节约资源的好处。 private static Singleton uniqueInstance new Singleton();Ⅲ 懒汉式-线程安全 只需要对 getUniqueInstance() 方法加锁那么在一个时间点只能有一个线程能够进入该方法从而避免了实例化多次 uniqueInstance。 但是当一个线程进入该方法之后其它试图进入该方法的线程都必须等待即使 uniqueInstance 已经被实例化了。这会让线程阻塞时间过长因此该方法有性能问题不推荐使用。 public static synchronized Singleton getUniqueInstance() {if (uniqueInstance null) {uniqueInstance new Singleton();}return uniqueInstance; }Ⅳ 双重校验锁-线程安全 uniqueInstance 只需要被实例化一次之后就可以直接使用了。加锁操作只需要对实例化那部分的代码进行只有当 uniqueInstance 没有被实例化时才需要进行加锁。 双重校验锁先判断 uniqueInstance 是否已经被实例化如果没有被实例化那么才对实例化语句进行加锁。 public class Singleton {private volatile static Singleton uniqueInstance;private Singleton() {}public static Singleton getUniqueInstance() {if (uniqueInstance null) {synchronized (Singleton.class) {if (uniqueInstance null) {uniqueInstance new Singleton();}}}return uniqueInstance;} }考虑下面的实现也就是只使用了一个 if 语句。在 uniqueInstance null 的情况下如果两个线程都执行了 if 语句那么两个线程都会进入 if 语句块内。虽然在 if 语句块内有加锁操作但是两个线程都会执行 uniqueInstance new Singleton(); 这条语句只是先后的问题那么就会进行两次实例化。因此必须使用双重校验锁也就是需要使用两个 if 语句第一个 if 语句用来避免 uniqueInstance 已经被实例化之后的加锁操作而第二个 if 语句进行了加锁所以只能有一个线程进入就不会出现 uniqueInstance null 时两个线程同时进行实例化操作。 if (uniqueInstance null) {synchronized (Singleton.class) {uniqueInstance new Singleton();} }uniqueInstance 采用 volatile 关键字修饰也是很有必要的 uniqueInstance new Singleton(); 这段代码其实是分为三步执行 为 uniqueInstance 分配内存空间初始化 uniqueInstance将 uniqueInstance 指向分配的内存地址 但是由于 JVM 具有指令重排的特性执行顺序有可能变成 132。指令重排在单线程环境下不会出现问题但是在多线程环境下会导致一个线程获得还没有初始化的实例。例如线程 T1 执行了 1 和 3此时 T2 调用 getUniqueInstance() 后发现 uniqueInstance 不为空因此返回 uniqueInstance但此时 uniqueInstance 还未被初始化。 使用 volatile 可以禁止 JVM 的指令重排保证在多线程环境下也能正常运行。 Ⅴ 静态内部类实现 当 Singleton 类被加载时静态内部类 SingletonHolder 没有被加载进内存。只有当调用 getUniqueInstance() 方法从而触发 SingletonHolder.INSTANCE 时 SingletonHolder 才会被加载此时初始化 INSTANCE 实例并且 JVM 能确保 INSTANCE 只被实例化一次。 这种方式不仅具有延迟初始化的好处而且由 JVM 提供了对线程安全的支持。 public class Singleton {private Singleton() {}private static class SingletonHolder {private static final Singleton INSTANCE new Singleton();}public static Singleton getUniqueInstance() {return SingletonHolder.INSTANCE;} }Ⅵ 枚举实现 public enum Singleton {INSTANCE;private String objName;public String getObjName() {return objName;}public void setObjName(String objName) {this.objName objName;}public static void main(String[] args) {// 单例测试Singleton firstSingleton Singleton.INSTANCE;firstSingleton.setObjName(firstName);System.out.println(firstSingleton.getObjName());Singleton secondSingleton Singleton.INSTANCE;secondSingleton.setObjName(secondName);System.out.println(firstSingleton.getObjName());System.out.println(secondSingleton.getObjName());// 反射获取实例测试try {Singleton[] enumConstants Singleton.class.getEnumConstants();for (Singleton enumConstant : enumConstants) {System.out.println(enumConstant.getObjName());}} catch (Exception e) {e.printStackTrace();}} }firstName secondName secondName secondName该实现可以防止反射攻击。在其它实现中通过 setAccessible() 方法可以将私有构造函数的访问级别设置为 public然后调用构造函数从而实例化对象如果要防止这种攻击需要在构造函数中添加防止多次实例化的代码。该实现是由 JVM 保证只会实例化一次因此不会出现上述的反射攻击。 该实现在多次序列化和序列化之后不会得到多个实例。而其它实现需要使用 transient 修饰所有字段并且实现序列化和反序列化的方法。 Examples Logger ClassesConfiguration ClassesAccesing resources in shared modeFactories implemented as Singletons JDK java.lang.Runtime#getRuntime()java.awt.Desktop#getDesktop()[java.lang.System#getSecurityManager()](
http://www.pierceye.com/news/218901/

相关文章:

  • 星月教你做网站东营城乡建设局官网
  • 镇江网站建设开发旺店通erp系统
  • 体育直播网站建设深圳制作小程序
  • 手机微信管理系统搜索引擎优化的流程是什么
  • 壁纸公司网站源码做网站价格表
  • 潜江网站设计商务科技网站建设
  • 合肥企业网站制作网站开发公司简介
  • 德州市建设小学网站文员工作内容
  • 网站域名买卖营销技巧第三季在线观看
  • 西宁市公司网站建设比较网站建设
  • 深圳网站设计公司建设部人才网站
  • 广水住房和城乡建设部网站巅峰网站建设
  • 建设智能家居网站SWOT分析商业网站有哪些
  • 相亲网站男人拉我做外汇h5特效网站欣赏
  • 网站一个多少钱有什么做同城的网站
  • 网站 改版 方案wordpress谷歌字体 4.9
  • 全网引流推广 价格网站百度关键词seo排名优化
  • 信用门户网站建设规范win7 iis 发布asp.net网站
  • 织梦网站添加视频教程如何套用wordpress的源码
  • 网站服务器模式wordpress安装后只有英文版
  • 企业网站建设晋升wordpress 自助建站
  • 网站建设案例建站资源
  • 四大商业网站镇江制作网站的
  • 做网站系统学校宠物交易网站模板
  • 佛山市官网网站建设哪家好瑶海合肥网站建设
  • 微网站app建筑图片大全高清
  • 贵阳金阳网站建设公司网站开发与维护书
  • 做非法网站判什么邢免抵退税在哪个网站做
  • 手机网站如何制作免费网站的内容和功能
  • 宁波网站推广合作商品牌设计包括