Java实现单例模式的几种方式
2024-10-19 09:44:03
单例模式(Singleton),保证在程序运行期间,内存中只有一个实例对象。
饿汉式,最常用的方式。JVM加载类到内存中时,创建实例,线程安全。
public class Boss
{
private static final Boss boss = new Boss();
private Boss(){}
public static Boss getBoss()
{
return boss;
}
}
懒汉式,存在线程安全问题,一般不用
public class Boss
{
private static Boss boss;
private Boss(){}
public static Boss getInstance()
{
if(boss==null)
{
boss= new Boss();
}
return boss;
}
}
懒汉式,使用加锁的方式解决线程安全问题
public class Boss
{
private static volatile Boss boss;
private Boss()){}
public static Boss getInstance()
{
if(boss==null)
{
synchronized(Boss.class)
{
if(boss==null)
{
boss= new Boss();
}
}
}
return boss;
}
}
使用静态内部类,在内部类中持有外部类的实例,从而实现懒加载,并保证线程安全性。
写法不太直观,不常用
public class Boss
{
private Boss(){}
private static class BossHolder
{
private static final Boss boss = new Boss();
}
public static Boss getInstance()
{
return BossHolder.boss;
}
}
终极写法!《Effective Java》中推荐的写法,使用枚举,干净利落!
public enum Boss
{
INSTANCE
}
最新文章
- 队列的链式存储方式的实现(Java语言描述)
- Ruby on Rails Tutorial 第二章 之 toy_app项目搭建
- matlab2014在mac Yosemite下出现java空指针情况
- 158. Read N Characters Given Read4 II - Call multiple times
- sqlServer 求当前周的第一天和最后一天,当前月的第一天和最后一天,前三个月的第一天和今天
- hadoop python and Twitter
- LeetCode - 690. Employee Importance
- 个人对【依赖倒置(DIP)】、【控制反转(IOC)】、【依赖注入(DI)】浅显理解
- luoguP1919 A*B Problem升级版 ntt
- 【redis专题(10)】KEY设计原则与技巧
- echarts使用笔记一:基本属性
- Minor GC vs Major GC vs Full GC
- nmon 加权平均法
- 闭包引起的onclick不起作用
- shiro中单点登录
- java学习笔记16(正则表达式)
- hibernate映射组成关系
- 小猴打架(luogu4430)(数论+生成树计数)
- Android程序员眼中世界上最遥远的距离
- CentOS命令top下你不一定懂的cpu显示信息
热门文章
- MSSQL·最长输出长度限制之解决方案
- [bug] IDEA springboot项目 访问静态资源 html页面 报404
- 马哥Linux SysAdmin学习笔记(三)
- Msf--永恒之蓝 ms17_010
- Rust模块化
- Linux_配置本地YUM源(RHEL8)
- Samba服务配置及配置文件说明
- 033.Python的__del__析构方法he__call__方法
- Lua中的基本函数库--(转自忧郁的加菲猫)
- 使用nuget包下载Entity Framework6.0无法使用模型类与数据库上下文自动生成controller与view