A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 哈皮哈皮doge 于 2015-8-25 23:06 编辑

  1. /*
  2. * 2种常见的单例模式:懒汉式和饿汉式
  3. * 懒汉式:用到该对象才new,存在线程不安全的问题
  4. * 饿汉式:管你用不用,上来就new,推荐使用
  5. */
  6. /*
  7.   * 1.饿汉式
  8.   */
  9. class Singleton1{
  10.          private static Singleton1 instance = new Singleton1();//1.jvm加载class的时候就初始化instance变量,static同时保证只有一个该类的实例
  11.          private Singleton1(){}//2.构造方法的访问权限设为private,保证了在该类的外部无法创建该类的实例
  12.          public static Singleton1 getInstance(){//3.对外提供获得该实例的方法
  13.                  return instance;
  14.          }
  15. }

  16. /*
  17.   * 2.懒汉式
  18.   */
  19. class Singleton2{
  20.          private static Singleton2 instance = null;
  21.          private Singleton2(){}
  22.          public static Singleton2 getInstance(){
  23.                  if(instance==null){
  24.                          instance = new Singleton2();//在多线程环境下,可能会创建多个对象,每个线程将instance的值保存到各自的线程栈中,独立操作
  25.                  }
  26.                  return instance;
  27.          }
  28. }
  29. /*
  30.   * 解决懒汉式线程不同步问题
  31.   */
  32. class Singleton3{
  33.          private static Singleton3 instance = null;
  34.          private Singleton3(){}
  35.          public static Singleton3 getInstance(){
  36.                  if(instance==null){
  37.                         //1.getInstance()属于静态同步方法,所以锁是当前对象的Class对象
  38.                         //2.对于实例同步方法,锁是当前对象
  39.                         //3.对于同步方法块,锁是Synchonized括号里配置的对象
  40.                          synchronized (Singleton3.class) {//当线程执行到此处的时候发现锁是lock的(即被其他线程占用着),于是等待,等到其他线程释放锁后,再执行到此时,发现instance已经创建了,于是就不会再创建了
  41.                                  if(instance==null){
  42.                                          instance = new Singleton3();
  43.                                  }
  44.                         }
  45.                         
  46.                  }
  47.                  return instance;
  48.          }
  49. }

复制代码


2 个回复

倒序浏览
挺楼主,好多没看懂
回复 使用道具 举报
Cancer 发表于 2015-8-25 23:05
挺楼主,好多没看懂

个人理解,一起交流
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马