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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ColdMoon 中级黑马   /  2015-7-30 19:19  /  444 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、饿汉式
饿汉式:指全局的单例实例在类加载时构建。 立即初始化。
速度快,不调用时也创建
类被加载时,静态变量instance会被初始化,此时类的私有构造函数会被调用。
  1. public class Singleton1 {
  2.          Singleton1(){}
  3.          private static Singleton1 instance=new Singleton1();
  4.          public static Singleton1 getlnstance(){
  5.             return instance;
  6.          }
  7. }
复制代码

2、懒汉式
懒汉式:指全局的单例实例在第一次被使用时构建。延迟初始化。
速度慢,调用时才创建
改进后的代码(双重加锁)
  1. public class Singleton2 {
  2.    private Singleton2(){}
  3.    private static Singleton2 instance;
  4.    public synchronized static Singleton2 getlnstance(){
  5.     init();
  6.     if(instance==null){
  7.      synchronized(Singleton2.class){
  8.         if(instance==null)
  9.             instance=new Singleton2();
  10.      }
  11.      return instance;
  12.     }
  13.     return instance;
  14.    }
  15.    private static void init(){}
  16. }
复制代码
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
最好使用第一种

7 个回复

倒序浏览
6666666666666
回复 使用道具 举报
目前我还看不懂
回复 使用道具 举报
貌似看不懂
回复 使用道具 举报
懒多为面试所用
回复 使用道具 举报
15225159271 来自手机 中级黑马 2015-7-30 20:30:46
地板
够详细,把多线程都分析上了
回复 使用道具 举报
看不懂,但记得面试题会有问着的
回复 使用道具 举报
有点难~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马