package singleton;

/**单例设计模式 饿汉式
*
* @author gx
*这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化,
*虽然导致类装载的原因有很多种,在单例模式中大多数都是调用getInstance方法,
* 但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,
* 这时候初始化instance显然没有达到lazy loading的效果。
*/
public class Ehan {
private static Ehan instance=new Ehan();
private Ehan(){}
public static Ehan getInstance(){
return instance;
} } package singleton;
/**单例设计模式饿汉式 变种
* 类初始化即实例化instance。
* @author gx
*
*/
public class EhanVarietal {
private static EhanVarietal instance=null;
static{
instance=new EhanVarietal();
}
private EhanVarietal(){} public static EhanVarietal getInstance(){
return instance;
} } package singleton; /**
* 单例设计模式懒汉式,线程不安全
* @author gx
* 这种写法lazy loading很明显,但是致命的是在多线程不能正常工作。
*/
public class LanHan {
private static LanHan instance; // 私有构造方法
private LanHan() {
} // 提供公有的外部构造方法
public static LanHan getInstance() {
if (instance != null) {
instance = new LanHan();
}
return instance;
}
} package singleton; /**单例设计模式 懒汉式 线程安全
*
* @author gx
* 这种写法能够在多线程中很好的工作,
* 而且看起来它也具备很好的lazy loading,但是,遗憾的是,效率很低,99%情况下不需要同步。
*/
public class LanHanSafety { private static LanHanSafety instance; private LanHanSafety(){} public static synchronized LanHanSafety getInstance(){
if(instance==null){
instance=new LanHanSafety();
} return instance;
} } package singleton; /**单例设计模式 枚举类型
*
* @author gx
*
*/
public enum MeiJu {
INSTANCE; private String name;
private int age;
private MeiJu(){} public void whateverMethod(){} public static MeiJu getInstance(){
return INSTANCE;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public String toString() { return this.name+"-----"+this.age;
} } package singleton; /**单例设计模式 静态内部类
*
* @author gx
*
*/
public class StaticInnerClass {
private static class StaticInnerClassHolder{
private static final StaticInnerClass INSTANCE=new StaticInnerClass();
}
private StaticInnerClass(){}
public static StaticInnerClass getInstance(){
return StaticInnerClassHolder.INSTANCE;
}
} package singleton; /**
* 单例设计模式 双重验锁
*
* @author gx
*
*/
public class YanSuo {
private volatile static YanSuo instance; private YanSuo() {
} public static YanSuo getInstance() {
if (instance == null) {
synchronized (YanSuo.class) {
if (instance == null) {
instance = new YanSuo();
}
}
}
return instance;
}
}

最新文章

  1. Android获取屏幕实际高度跟显示高度,判断Android设备是否拥有虚拟功能键
  2. MYSQL的深入学习--优化步骤
  3. Codevs1026 逃跑的拉尔夫
  4. Maven_dependencies 和 dependencyManagement 的区别
  5. java数据结构
  6. CSS 笔记三(Tables/Box Model/Outline)
  7. 26.打印所有和为S的连续正整数序列[FindContinuousSequencesWithSumS]
  8. DOM节点-appendChild
  9. xll
  10. 抛出自定义异常,spring AOP事务不回滚的解决方案
  11. QVariant类学习(非常强大的类型,甚至能处理QMap<QString ,QVariant>)
  12. Bow模型(解释的很好)
  13. River Hopscotch(二分)
  14. SQL:deferrable initially deferred
  15. Java设计模式探讨之单例模式
  16. RabbitMQ配置
  17. Codeforces909D Colorful Points(缩点)
  18. Linux基础命令---dump
  19. 使用transient关键字解决ehcache序列化错误
  20. 面试题:输入两个整数 n 和 m,从数列1,2,3…….n 中 随意取几个数, 使其和等于 m

热门文章

  1. HihoCoder1642 : 三角形面积和([Offer收割]编程练习赛37)(求面积)(扫描线||暴力)(占位)
  2. bzoj 4514: 数字配对
  3. windows下vs2012用gsoap开发webservice实例
  4. bzoj 4278 Tasowanie —— 后缀数组
  5. 查看MySql数据库物理文件存放位置
  6. exosip 和 pjsip 简介
  7. Eclipse 安装插件
  8. day1 java基础回顾-IO流
  9. Spring Data JPA stackoverflow
  10. day03-CSS(1)