java单例问题
2024-09-03 12:51:40
之前看资料,有人根据对象的创建时间将单例的实现分为懒汉式和饿汉式:
懒汉式:
public class Singleton {
private volatile static Singleton instance; private Singleton(){
System.out.println("Singleton has loaded");
} public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
1 通过延迟加载,提高内存使用效率;
2 双重为空判断:第一个判断可以减少锁判断;第二个判断可以减少对象重复重复创建;
饿汉式:
public class Singleton {
// 通过静态实现单例,但是存在创建时间过早问题
privatestatic Singleton instance = new Singleton(); private Singleton(){
System.out.println("Singleton has loaded");
} public static Singleton getInstance() {
return instance;
}
}
1 代码精简;
2 通过静态实现在类加载时就创建对象,避免了同步问题;但是也造成实例化过早,存在内存浪费;
按需饿汉式:
public class Singleton {
private Singleton(){
System.out.println("Singleton has loaded");
} public static Singleton getInstance() {
return Quote.instance;
} private static class Quote {
private static final Singleton instance = new Singleton();
}
}
1 使用内部类来创建对象,实现延迟加载;
参考资料:
https://baijiahao.baidu.com/s?id=1604691509810750218&wfr=spider&for=pc
最新文章
- 关于有默认值的字段在用EF做插入操作时的思考(续)
- 使用webstom或者idea上传代码到github或coding
- append追加的使用
- 将在本地创建的Git仓库push到Git@OSC
- API Design
- vs常用调试快捷键
- java异常分类(运行时异常,可检查异常)
- Linux主机安全配置的几个脚本【转载】
- Extjs4开发中的一些问题
- java 懒汉式--初步解决安全问题
- OP(Over-provisioning)预留空间
- java IdentityHashMap 与HashMap
- 正确的IP地址正则表达式
- 用excel.php类库导出excel文件
- BLE空中升级 谈(二)
- C++学习-2
- vue基础特性
- Servlet之cookie处理
- MongoDb 集群不可用后SECONDARY节点强制启动
- 通过 docker 搭建自用的 gitlab 服务