单例模式实现
1. 单线程可用
public class Singleton { private static Singleton singleton; private Singleton() { } public static Singleton getInstance() { if (null == singleton) { singleton = new Singleton(); } return singleton; } }
2. 使用final常量
public class Singleton { private static final Singleton singleton = new Singleton(); private Singleton() { } public static Singleton getInstance() { return singleton; } }
3. 加锁构造
public class Singleton { private static Singleton singleton; private static final Lock LOCK = new ReentrantLock(); private Singleton() { } public static Singleton getInstance() { if (null == singleton) { LOCK.lock(); if (null == singleton) { singleton = new Singleton(); } LOCK.unlock(); } return singleton; } }
4. 方法级加锁
public class Singleton { private static Singleton singleton; private Singleton() { } public static Singleton getInstance() { if (null == singleton) { init(); } return singleton; } private static synchronized void init(){ if(null == singleton){ singleton = new Singleton(); } } }
5. 静态内部类实现,多线程可用
public class Singleton { private Singleton() { } public static Singleton getInstance() { return Container.singleton; } private static class Container { private static Singleton singleton = new Singleton(); } }
6. 拒绝强行反射创建我
public class Singleton { private Singleton() { if (null != Container.singleton) { throw new UnsupportedOperationException(); // 报错啦 } } public static Singleton getInstance() { return Container.singleton; } private static class Container { private static Singleton singleton = new Singleton(); } }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
搭建jdk环境
jdk(java develop toolkit)主要包括:编译程序的javac,运行程序的java,javaAPI类库。 主要步骤: 下载jdk安装包 设置环境变量(JAVA_HOME,Path,CLASSPATH) 测试是否搭建成功 下载JDK安装包 1、官网下载最新版本jdk,http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择合适系统的版本,这点很重要! 2、直接双击运行安装包,然后一路确定。 留意这个安装地址,下一步就要用,copy一下:C:\Program Files\Java\jdk1.8.0_181\ 等待安装。。。 还有这个地址:C:\Program Files\Java\jre1.8.0_181 安装完成!有2个文件夹。 这个时候没有配置路径,或者配置不对,是不能直接使用编译工具javac的 设置环境变量(JAVA_HOME,Path,CLASSPATH) 1、右键单击“我的电脑”》属性》高级系统设置》环境变量》新建》变量名:JAVA_H...
- 下一篇
RyuBook1.0案例一:Switching Hub项目源码分析
开发目标 实现一个带MAC地址学习功能的二层交换机 Openflow交换机与Openflow控制器安全通道建立步骤 switch and controller建立未加密TCP连接或者加密的TLS连接 确定连接通道的Openflow版本 握手 其他操作 建立连接通道后,二者发生Hello包,进行协商Openflow版本号 完成交换Hello消息之后建立安全通道,执行握手。Controller发生Features请求,并处理Features响应 接收到Features响应,控制器可以向交换机发送SET_CONFIG或者GET_CONFIG请求消息,进行设置交换机默认配置或者查询交换机配置。 之后,可以进行OpenFlow的其他操作 Flow-Mod消息 Flow-Mod(Modify Flow Entry Message)由控制器向交换机下发的设置流表项的信息 其中 ofp_match结构体为数据包匹配部分。 程序分析 设置想要向交换机协商的OpenFlow版本号 OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION] 下发Table-miss流表项 设置完成该...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- 设置Eclipse缩进为4个空格,增强代码规范