java编程题:编写⼀个单例模式
/**
* java编程题:编写⼀个单例模式
*/
public class Singleton {
/*
//1. 饿汉式,饿汉式,线程安全但效率⽐较低。。。⼀上来就new对象,真够饿的
private Singleton(){}
private static final Singleton Singleton = new Singleton();
public static Singleton getInstance(){
return Singleton;
}
*/
/*
//2. 懒汉式,⾮线程安全。。。等⽼板来叫了,才去做事,⼩⼦真懒
private Singleton(){}
private static Singleton Singleton = null;
public static Singleton getInstance(){
if(Singleton==null){
Singleton = new Singleton();
}
return Singleton;
}
*/
单例模式的几种实现方式/*
//3. 懒汉式,线程安全,但效率很低。。。99%情况下不需要同步
private Singleton(){}
private static Singleton Singleton = null;
public static synchronized Singleton getInstance(){ //⽅法上加synchronized同步
if(Singleton==null){
Singleton = new Singleton();
}
return Singleton;
}
*/
/*
//4. 双重校验锁
private Singleton(){}
//JDK5以后,为避免双重检查锁存在的问题,加⼊了volatile,是保证变量修改的可见性
private static volatile Singleton Singleton = null;
public static Singleton getInstance(){
if(Singleton==null){
synchronized(Singleton.class){ //加synchronized关键字同步
if(Singleton==null){
Singleton = new Singleton();
}
}
}
return Singleton;
}
*/
/*
//5. 静态内部类
private Singleton(){}
private static class SingletonHolder {
private static final Singleton singleton = new Singleton(); }
public static final Singleton getInstance(){
return SingletonHolder.singleton;
}
*/
//6. 枚举
private static enum EnumSingleton{
INSTANCE;
private Singleton singleton;
//JVM会保证此⽅法绝对只调⽤⼀次
private EnumSingleton(){
singleton = new Singleton();
}
public Singleton getInstance(){
return singleton;
}
}
}
参考:
cantellow.iteye/blog/838473
wwwblogs/yinxiaoqiexuxing/p/5605338.html blog.csdn/zhanlanmg/article/details/49944991
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论