美文网首页
多线程下懒汉单例的问题

多线程下懒汉单例的问题

作者: li_荔枝 | 来源:发表于2019-10-21 00:14 被阅读0次

老规矩,看例子

public class LazySingleton {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                Singleton.getInstance();
            }
        };
        for (int i = 0; i < 20; i++) {
            Thread thread = new Thread(runnable);
            thread.start();
        }   
    }
}

class Singleton{
    private static Singleton instance = null;
    public Singleton(){
        System.out.println("实例化了一个对象");
    }
    public static Singleton getInstance(){
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
image.png

你变了!!!这不是我要的单例!!!

这是因为:
我们先假设第一个线程成功执行了这段代码。
if (instance == null)
与此同时第x个线程,可能是5678910...抢到了cpu资源并执行了
if (instance == null)
此时,第一个线程和第x个线程都通过了条件判断,当他们得到cpu资源后继续执行下面的代码,因此会创建出多个实例。

怎么办?怎么让它回心转意?

public static synchronized Singleton getInstance(){
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

在getInstance()方法上加个同步锁就好啦,修改后的运行结果:


image.png

相关文章

  • 12、彻底玩转单例模式

    饿汉式单例: 懒汉式单例: 问题: 懒汉式在多线程下: 结果:(可能会出现多次创建对象——即和单例相违背) 双重检...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • 多线程下懒汉单例的问题

    老规矩,看例子 你变了!!!这不是我要的单例!!! 这是因为:我们先假设第一个线程成功执行了这段代码。if (in...

  • 常用设计模式 单例模式-懒汉式

    懒汉单例 多线程情形 上面的程序使用单线程时不会有问题,但是使用多线程时会破坏单例。运行以下程序lazySingl...

  • 设计模式(创建型--单例模式)

    1.饿汉式单例(立即加载方式) 2.懒汉式单例(延迟加载方式) 多线程环境下使用syhchronized 利用双重...

  • 单例模式有几种写法?

    懒汉模式 懒汉是变种最多的单例模式。我们从懒汉出发,通过其变种逐渐了解实现单例模式时需要关注的问题。 基础的懒汉 ...

  • 懒汉单例模式多线程问题

    单例模式:懒汉式在多线程下的可能被多次赋值的情况: LazySingleton.java 出现原因:可能会有多个线...

  • 单例模式

    饿汉式 public class CustomerSingleton { 懒汉式 多线程内部类实现单例 publi...

  • Singleton 单例模式

    饿汉式单例模式 饿汉式单例模式 通过静态代码块增加异常处理 懒汉式单例模式 存在线程安全问题 懒汉式单例模式 解决...

  • java 单例模式

    单例分为两种:饿汉式单例 和懒汉式单例,我们常用懒汉式 单例设计模式:用来解决对象只有一个的问题,保证对象唯一。 ...

网友评论

      本文标题:多线程下懒汉单例的问题

      本文链接:https://www.haomeiwen.com/subject/uqrzmctx.html