单例模式

来源:互联网 发布:数据分析师招聘互联网 编辑:程序博客网 时间:2024/05/04 11:05

package demo.one;

/**
 *
 * 单例设计模式 1:饿汉式 2:懒汉式(又称单例模式的延迟加载)
 *
 */
public class Single {
 /**  这里的整个是饿汉式的单例模式
 private static final Single single = new Single();

 private Single() {
 }

 public static Single getInstance() {
  return single;
 }
 */
 
 
 
/********以下是单例模式中的懒汉式 也称单例模式的延迟加载****************/
 
 private static Single single=null;
 /**  注意这里是不考虑多线程的时候的单例模式
 public static Single getInstance(){
  if(single==null)
   single=new Single();
  return single;
 }
 */
 
 //下面是考虑多线程的延迟加载的单例模式
 
 public static Single getInstance(){
  if(single==null){
    synchronized(Single.class){
     if(single==null)
      single=new Single();
   }
  }
  
  return single;
 }

 /**
  * 以上是多线程的单例延迟加载模式
  * 注意这里面试经常问的问题
  * 1:让你写一个延迟加载的单例模式就写这个
  * 2:synchronized(Single.class)多线程中的锁为什么用的是Single.class
  * 因为哲理是一个static,多线程中对static的加锁是它的对象的.class,也就是该对象所属的字节码对象
  * 3:双重if是为了解决多线程的效率问题,这样只有第一次和第二次会判断它的锁,之后不会了
  */
}

原创粉丝点击