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

做网站要找什么关键词优化排名易下拉稳定

做网站要找什么,关键词优化排名易下拉稳定,建筑做网站,wordpress自动生成文章目录 前言 1.饿汉式 2.懒汉式 3.双重检测 4.静态内部类 5.枚举 总结#xff1a; 前言 单例模式是我们日常开发过程中#xff0c;遇到的最多的一种设计模式。通过这篇文章主要分享是实现单例的几种实现方式。 1.饿汉式 饿汉式的实现方式比较简单。在类加载的时候#…目录 前言 1.饿汉式 2.懒汉式 3.双重检测  4.静态内部类 5.枚举 总结 前言 单例模式是我们日常开发过程中遇到的最多的一种设计模式。通过这篇文章主要分享是实现单例的几种实现方式。 1.饿汉式 饿汉式的实现方式比较简单。在类加载的时候instance 静态实例就已经创建并初始化好了所以instance 实例的创建过程是线程安全的。不过这样的实现方式不支持延迟加载从名字中我们也可以看出这一点。具体的代码实现如下所示 public class IdGenerator { private AtomicLong id new AtomicLong(0);private static final IdGenerator instance new IdGenerator();private IdGenerator() {}public static IdGenerator getInstance() {return instance;}public long getId() { return id.incrementAndGet();} } 2.懒汉式 懒汉式相对于饿汉式的优势是支持延迟加载。具体的代码实现如下所示 public class IdGenerator { private AtomicLong id new AtomicLong(0);private static IdGenerator instance;private IdGenerator() {}public static synchronized IdGenerator getInstance() {if (instance null) {instance new IdGenerator();}return instance;}public long getId() { return id.incrementAndGet();} } 懒汉式的缺点也很明显我们给 getInstance() 这个方法加了一把大锁synchronzed导致这个函数的并发度很低。量化一下的话并发度是 1也就相当于串行操作了。而这个函数是在单例使用期间一直会被调用。如果这个单例类偶尔会被用到那这种实现方式还可以接受。但是如果频繁地用到那频繁加锁、释放锁及并发度低等问题会导致性能瓶颈这种实现方式就不可取了。 3.双重检测  饿汉式不支持延迟加载懒汉式有性能问题不支持高并发。那我们再来看一种既支持延迟加载、又支持高并发的单例实现方式也就是双重检测实现方式。在这种实现方式中只要 instance 被创建之后即便再调用 getInstance() 函数也不会再进入到加锁逻辑中了。所以这种实现方式解决了懒汉式并发度低的问题。具体的代码实现如下所示 public class IdGenerator { private AtomicLong id new AtomicLong(0);private static IdGenerator instance;private IdGenerator() {}public static IdGenerator getInstance() {if (instance null) {synchronized(IdGenerator.class) { // 此处为类级别的锁if (instance null) {instance new IdGenerator();}}}return instance;}public long getId() { return id.incrementAndGet();} } 实际上上述实现方式存在问题CPU 指令重排序可能导致在 IdGenerator 类的对象被关键字 new 创建并赋值给 instance 之后还没来得及初始化执行构造函数中的代码逻辑就被另一个线程使用了。这样另一个线程就使用了一个没有完整初始化的 IdGenerator 类的对象。要解决这个问题我们只需要给 instance 成员变量添加 volatile 关键字来禁止指令重排序即可。 4.静态内部类 我们再来看一种比双重检测更加简单的实现方法那就是利用 Java 的静态内部类。它有点类似饿汉式但又能做到了延迟加载。具体是怎么做到的呢我们先来看它的代码实现 public class IdGenerator { private AtomicLong id new AtomicLong(0);private IdGenerator() {}private static class SingletonHolder{private static final IdGenerator instance new IdGenerator();}public static IdGenerator getInstance() {return SingletonHolder.instance;}public long getId() { return id.incrementAndGet();} } SingletonHolder 是一个静态内部类当外部类 IdGenerator 被加载的时候并不会创建 SingletonHolder 实例对象。只有当调用 getInstance() 方法时SingletonHolder 才会被加载这个时候才会创建 instance。instance 的唯一性、创建过程的线程安全性都由 JVM 来保证。所以这种实现方法既保证了线程安全又能做到延迟加载。 5.枚举 我们介绍一种最简单的实现方式基于枚举类型的单例实现。这种实现方式通过 Java 枚举类型本身的特性保证了实例创建的线程安全性和实例的唯一性。具体的代码如下所示 public enum IdGenerator {INSTANCE;private AtomicLong id new AtomicLong(0);public long getId() { return id.incrementAndGet();} } 总结 在日常的工作中使用枚举类的方式创建单例是最安全的。 枚举可避免被反序列化破坏单例。原因枚举对象的序列化、反序列化有自己的一套机制序列化时仅仅是将枚举对象的name属性输出到结果中反序列化的时候则是通过java.lang.Enum的valueOf()方法来根据名字查找枚举对象。 推荐大家使用枚举的方式创建单例。
http://www.w-s-a.com/news/930041/

相关文章:

  • 网站的构造有什么网站做生鲜配送的
  • 怎么在手机上做微电影网站小马厂网站建设
  • 网络广告投放网站中山网
  • 保定网站制作专业网页设计模板html代码运行
  • 中国专利申请网官网杭州seo优化
  • 杭州低价做网站网站系统功能流程图
  • 档案室建设网站名贵中药材初加工平台
  • 怎么做优惠券的网站wordpress加载速度
  • 手机网站 分辨率如何创建网站挣钱
  • 网站建设工作标准做模版网站
  • 免费注册微信网站怎样做天猫网站视频
  • 青海建设厅网站通知wordpress如何改文章id
  • 国外搜索网站建设支付网站备案
  • 合肥建站公司有哪家招聘的拼车平台网站开发
  • 网站 备案 固话北京建站模板企业
  • 网站开发的公司wordpress分类目录 模版
  • flashfxp怎么上传对应网站空间wordpress无法创建
  • 建设网站案例分析做网站代理怎么赚钱
  • 唯品会网站建设特色域名备案期间 网站访问
  • 郑东新区建设局网站怎么做万网网站
  • 阿里云上传的网站 服务器路径试用网站开发
  • 做美食原创视频网站网站开发要多钱
  • 怎么做网站作业哪个网站可兼职做logo
  • asp网站搭建教程做网站备案完成之后需要干什么
  • 无锡外贸网站开发兰州网站在哪备案
  • 广州百度网站建设公司天津建设电工证查询网站
  • 网站建设与管理行业发展情况制作网页动态效果
  • wordpress 特色缩略图临沂seo全网营销
  • 隆昌市住房和城乡建设厅网站做网站用什么字体比较好
  • 惠州网站建设设计18款未成年禁用软件ap入口