首页 > 编程语言 >JAVA---单例模式

JAVA---单例模式

时间:2022-11-22 21:16:08浏览次数:45  
标签:JAVA Hungry public --- 懒汉 static 单例 LazyMan

单例模式

单例的目的是保证某个类仅有一个实例。当有某些类创建对象内存开销较大时可以考虑使用该模式。单例模式又分为 饿汉式 和 懒汉式。

1.饿汉式

饿汉式。顾名思义,该模式在类被加载时就会实例化一个对象。

该模式能简单快速的创建一个单例对象,而且是线程安全的(只在类加载时才会初始化,以后都不会)。但它有一个缺点,就是不管你要不要都会直接创建一个对象,会消耗一定的性能

//饿汉式
public class Hungry {
    private Hungry(){}
    private final static Hungry HUNGRY = new Hungry();
    public static Hungry getInstance(){
        return HUNGRY;
    }
}

2.懒汉式

2.懒汉式。该模式只在你需要对象时才会生成单例对象(比如调用getInstance方法)但他不是线程安全的

//懒汉式
public class LazyMan {

    private LazyMan() {
        System.out.println(Thread.currentThread().getName() + "--ok");
    }
//volatile保证并发内存可见性,有序性,可以防止指令重排,但不能保证原子性
    private volatile static LazyMan lazyMan;

    public static LazyMan getInstance() {
        //双重检测锁模式 懒汉式单例 简称DCL
        if (lazyMan == null) {
        //synchronized保证并发内存可见性,有序性,原子性
            synchronized (LazyMan.class){
     //不是原子性操作,可能会造成指令重排
     lazyMan = new LazyMan();
            }
        }
        return lazyMan;
    }
    //单线程ok,多线程不行,需要加锁
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            new Thread(LazyMan::getInstance).start();
        }
    }
}

标签:JAVA,Hungry,public,---,懒汉,static,单例,LazyMan
From: https://www.cnblogs.com/wang1999an/p/16916437.html

相关文章

  • 2022-11-22
    1packagecn.itsource._inputsteam;23importjava.io.FileInputStream;4importjava.io.FileNotFoundException;5importjava.io.FileOutputStream;6imp......
  • 图像处理技术:数字图像压缩 ----- 图像冗余、无损压缩、有损压缩、图像压缩标准
    一、基本概念数据压缩是指减少表示给定信息量所需的数据量。•图像冗余对信息进行编码:•出现概率较高的信息单元,赋予较短的编码;•出现概率较低的信息单元,赋予较长......
  • BZOJ2460-[BeiJing2011]元素
    BZOJ2460Description    相传,在远古时期,位于西方大陆的MagicLand上,人们已经掌握了用魔法矿石炼制法杖的技术。那时人们就认识到,一个法杖的法力取决于使用的矿石......
  • BZOJ1009-[HNOI2008] GT考试
    [BZOJ1009][HNOI2008]GT考试Description    阿申准备报名参加GT考试,准考证号为N位数X1X2….Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字。他的不吉利数学A1A2......
  • POJ2406-Power Strings
    PowerStringsTimeLimit: 3000MS MemoryLimit: 65536KTotalSubmissions: 55320 Accepted: 22983DescriptionGiventwostringsaandbwedefinea*b......
  • BZOJ4698-[sdoi2008] Sandy的卡片
    [sdoi2008]Sandy的卡片时限0.5sSandy和Sue的热衷于收集干脆面中的卡片。然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型。......
  • BZOJ3670-[Noi2014]动物园
    3670:[Noi2014]动物园TimeLimit: 10Sec  MemoryLimit: 512MBSubmit: 3465  Solved: 1882[​​Submit​​][​​Status​​][​​Discuss​​]D......
  • BZOJ2580-[Usaco2012 Jan]Video Game
    题目描述Bessieisplayingavideogame!Inthegame,thethreeletters'A','B',and'C'aretheonlyvalidbuttons.Bessiemaypressthebuttonsinanyordersh......
  • BZOJ3747-[POI2015]Kinoman
    Description共有m部电影,编号为1~m,第i部电影的好看值为w[i]。在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部。你可以选择l,r(1<=l<=r<=n),并观......
  • POJ2104-K-th Number(浅析主席树)
    K-thNumberTimeLimit: 20000MS MemoryLimit: 65536KTotalSubmissions: 65162 Accepted: 22979CaseTimeLimit: 2000MSDescriptionYouareworkingforMac......