开发者社区 问答 正文

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. 什么情况使用什么方式写法?

展开
收起
蛮大人123 2016-03-19 15:32:27 2045 分享 版权
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

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

    2019-07-17 19:08:18
    赞同 展开评论
问答分类:
问答标签:
问答地址: