java中的6种单例写法
在java中,单例有很多种写法,面试时,手写代码环节,除了写算法题,有时候也会让手写单例模式,这里记录一下单例的几种写法和优缺点。
1.初级写法
2.加锁
3.饿汉式
4.懒汉式
5.双锁检验
6.内部类
上面这种写法,在并发环境下,会出现多个实例。
我们优化上面的代码,遇到并发,很容易想到加锁,把获取对象的方法加上关键字synchronized,很巧,这种写法也称为懒汉式单例 ,如下:
但是,显然,我们把整个方法都同步了,效率很低下,我们可以继续优化,只在创建实例的地方加上同步,参考5双锁检验。
饿汉式的特点是:类在加载时就直接初始化了实例。即使没用到,也会实例化。
4.懒汉式
懒汉式的特点是:用到这个实例时才去调用方法实例化。这个和2中的看起来是一样的,因为这个实例化方法加了synchronized ,这样安全一些。
5.双锁检验
双重非空判断,new对象前加一次锁。
volatile关键字,考虑的是,new关键字在虚拟机中执行时其实分为很多步骤,具体原因可以参考深入理解java虚拟机一书(考虑的是这个new关键字字节码执行时是非原子性的),而volatile关键字可以防止指令重排。
6.内部类
推荐一个交流学习群,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
点击:加入 JAVA架构学习交流群:614478470
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
11月30日云栖精选夜读 | 用Python告诉你,现在的房租有多高?
杭州房租:钱塘两岸最高,奥体单间达4830元/月。不少人感叹:躲过了高房价,躲不过高房租,面对房租上涨,感觉身体被掏空。2018年的这个夏天,房租正在成为摧垮年轻人的“第一根稻草”,在杭州打拼的你,所在的城区房租涨了吗?你是否还能潇洒地说出 “买不起房子,就租嘛”? 这是在新浪财经看到的一篇新闻,因为初来杭州,房租涨没涨,我不清楚,但是房租高确确实实是存在的,说多了还是因为穷呐. 热点热议 用Python告诉你,现在的房租有多高? 作者:技术小能手发表在:程序员共成长 互联网巨头跑步入场,国内智能音箱真是扶不起的“阿斗”? 作者:技术小能手发表在:科技云报道 看中国 | 王强:化解供需错配新零售行业必须回归两大职能 作者:技术小能手发表在:阿里研究院 知识整理 程序猿修仙之路--算法之希尔排序 作者:技术小能手发表在:Golang语言社区 超8千Star,火遍Github的Python反直觉案例集! 作者:技术小能手发表在:大数据文摘 30行代码实现微信自动回复机器人 作者:技术小能手发表在:Python中文社区 用 100 行代码提升 10 倍的性能 作者:技术小能手发表在:Java...
- 下一篇
开发者测试(4)-采用精准测试工具对dubbo微服务应用进行测试
简介:本文主要目的是把现今主流的Dubbo框架项目和精准测试进行对接,通过精准测试的数据穿透、数据采集、测试用例与代码的双向追溯、数据分析等一系列精准测试的特有功能达到对项目质量的保证。 本次环境搭建分为基础环境准备、Dubbo环境搭建、精准测试环境搭建、精准测试与Dubbo环境对接等一整套完整的配置过程,用户可以通过下图中的流程图确认自己所部署过程中进行到的阶段点,从而排查部署中可能遇见的问题。 一 dubbo的工具配置流程 1,使用工具 1, Eclipse Java Photon2, JDK 1.83, MySQL 5.74, Navicat for MySQL5, Nodejs6, apache-maven-3.5.47, zoa-agent-1.6.28, apache-tomcat-8.0.479, J2EE_Enterprise_key_64bit061410, 项目:dubbo11, 服务:zookeeper项目和微服务下载地址:https://pan.baidu.com/s/1JBKJBVhm0XQT0VmWacD3wQ 提取码: nr9t 2 ,配置所需...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)