Zze0
2015-09-29 02:28
采纳率: 100%
浏览 1.5k
已结题

java单例模式写法的问题, 请大神!

第一种写法:

public class LoginService{

private static LoginService instance;

public static LoginService getInstance() {
    if (instance == null) {
        synchronized (LoginService.class) {
            if (instance == null) {
                instance = new LoginService();
            }
        }
    }
    return instance;
}

}

第二种写法:
public class LoginService{

private static LoginService instance = new LoginService;

public static LoginService getInstance() {
    return instance;
}

}

我的问题是:
1. 有没有必要使用第一种写法?
2. 第一种写法和第二种写法有什么区别么?
3. 什么情况使用什么方式写法?

跪求大神回复, 谢谢 0.0

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

4条回答 默认 最新

  • pkx100861 2015-09-29 03:05
    最佳回答

    第一种是懒汉式单例,第二种事饿汉式单例,
    饿汉式是典型的空间换时间,当类装载的时候就会创建类实例,不管你用不用,先创建出来,然后每次调用的时候,就不需要再判断了,节省了运行时间。懒汉就相反。每次需要判断是否已经创建了对象实例,如果创建了就不在创建。增加了判断的开销。
    上面哪两种都是线程不安全的。需要加关键字synchronsized

    评论
    解决 无用
    打赏 举报
查看更多回答(3条)

相关推荐 更多相似问题