单例模式实现
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条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker容器配置,解决镜像无法拉取问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- CentOS7设置SWAP分区,小内存服务器的救世主
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作