Java中的单例
来源:互联网 发布:火影忍者淘宝 编辑:程序博客网 时间:2024/06/16 19:07
Java中的单例一般来说有:饿汉、懒汉(双重检查)、枚举、静态内部类
以下只说同步的:
饿汉模式就是类加载时即创建对象;
private static final User u=new User();然后方法里返回这个就行
懒汉模式就是延迟对象创建,一般是双重检查:
public class Singleton {
private static volatile Singleton instance=null;
private Singleton() {}
public static Singleton getInstance() {
if(instance==null) {
synchronized (Singleton.class) {
if(instance==null)
instance=new Singleton();
}
}
return instance;
}
然后这个双重检查还可以优化一下,effective java上说可以优化25%,在我电脑上大概是16.8%(使用2个线程,每个线程创建500个对象,执行3次取平均值)。优化的原因应该是instance是volatile的,if判断的时候要取来取去的,而它取的性能没那么好。
public static Singleton getInstance2() {
Singleton single=instance;
if(single==null) {
synchronized (Singleton.class) {
//single=instance;这一句书上有,不知道是否必须
if(single==null)
instance=single=new Singleton();//instance赋值必须,不然效率会特别低,原因应该也是跟前面说的有关
}
}
return single;
}
}
静态内部类也是很好的做法:
private static class createSingleton{
private static final Singleton instance=new instance();
}
然后在方法里返回就行。
枚举:前面都要设置构造器私有,枚举自动私有了,其实例也是单例的
class Resource{}public enum SomeThing { INSTANCE; private Resource instance; SomeThing() { instance = new Resource(); } public Resource getInstance() { return instance; }}
- Java中的单例
- Java中的单例
- java中的单例模式
- java中的单例模式
- java中的单例模式
- java中的单例模式
- Java中的单例模式
- java中的单例模式
- java中的单例模式
- Java中的单例模式
- JAVA中的单例模式
- Java中的单例模式
- java中的单例模式
- JAVA中的单例模式
- Java中的单例模式
- Java中的单例模式
- java中的单例模式
- java中的单例模式
- mybatis if条件判断各种使用方式
- 解决Eclipse EE部署web项目在Tomcat webapp目录下没有工程文件的问题
- poi--2.word基本
- php 程序的优化方案
- Linux常用命令
- Java中的单例
- Keras入门课2 -- 使用CNN识别mnist手写数字
- 5. Longest Palindromic Substring
- HTML DOM Event 对象(Document 对象)
- Eclipse常用功能和详细快捷键
- 树状数组+ 离散化 求逆序数
- 分别用css、JS、jQuery实现二级菜单、三级菜单
- 深度学习: random initialization (随机初始化)
- JAVA学习笔记(二)字符串的比较