多线程之单例模式
创始人
2025-06-01 16:16:19
0

目录

1.什么是单例模式

 2.单例模式的类型

3.饿汉模式

4.饿汉模式

5.多线程


1.什么是单例模式

单例模式是指内存中只会创建且仅创建一次对象的设计模式.单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象.

 2.单例模式的类型

饿汉模式:类内部把实例创建好,等待被程序使用,禁止外部重新创建实例

懒汉模式:在真正需要使用对象时去创建对象

3.饿汉模式

编码时就指明要马上创建对象,不要等到被调用时去创建

实现Singleton类步骤:

1.定义唯一实例本体

private是私有的,static是类的属性

JVM中,每个类对象只有一份

2.获取实例方法

因为不能在外部创建实例,所以要编写方法,用来调用唯一实例对象

3.禁止外部new实例

把构造方法的修饰符写为private

class Singleton{//唯一实例本体private static Singleton instance=new Singleton();//获取实例的方法public static Singleton getInstance(){return instance;}//禁止外部new实例private Singleton(){}
}

测试

public static void main(String[] args) {//s1,s2是同一个对象Singleton s1=Singleton.getInstance();Singleton s2=Singleton.getInstance();//Singleton s3=new Singleton();error}

外部无论怎么调用都是一个对象,不能创建新的对象

4.饿汉模式

懒汉式创建对象的方法是在程序使用对象前,先判断该对象是否已经实例化(判空),若已实例化直接返回该类对象,否则则先执行实例化操作。

实现SingletonLazy类步骤:

1.定义实例

private是私有的,static是类的属性

JVM中,每个类对象只有一份

因为非必要不创建,所以实例对象为空

2.获取实例的方法

先判断该对象是否已经实例化(判空),若已实例化直接返回该类对象,否则则先执行实例化操作。

3.禁止外部new实例

把构造方法的修饰符写为private

class SingletonLazy{private static SingletonLazy instance=null;public static SingletonLazy getInstance(){if(instance==null){instance=new SingletonLazy();}return instance;}private SingletonLazy(){}
}

5.多线程

因为饿汉模式只有读,所以没有线程安全问题

但是懒汉模式有读有写,所以存在线程安全问题

就该问题解决办法

1.加锁,把if和new变成原子操作

2.双重if,减少不必要的加锁

3.使用volatile指令从排序,保证后序线程能拿到完整的对象

class SingletonLazy{volatile private static SingletonLazy instance=null;public static SingletonLazy getInstance(){if(instance==null){//两个或多个线程同时看到后,满足继续,不满足返回instancesynchronized(SingletonLazy.class){if(instance==null){//一个线程进入,另一个线程就不会进入instance=new SingletonLazy();}}}return instance;}

相关内容

热门资讯

深圳海关“政策+科技”双支撑 ... 当前,全球贸易形势复杂多变,作为外贸大省的重要窗口,深圳海关积极作为,以智慧监管为抓手,以精准服务为...
京东外卖将扩招至15万名全职骑... |2025年6月3日 星期二| NO.1京东外卖:近期将扩招至15万名全职骑手 6月1日,京东外卖宣...
免关税政策即将到期 欧盟将与乌... 欧盟委员会发言人奥洛夫·吉尔2日表示,欧盟当前针对乌克兰的免关税政策将于6月5日到期,欧盟正在着手制...
鲍威尔出席美联储国际金融司活动... 美联储主席鲍威尔(Jerome Powell)周一在美联储国际金融司(IF)成立75周年活动上发表讲...
关税政策推进受阻,特朗普政府求... 6月2日,美国特朗普政府请求联邦上诉法院阻止此前哥伦比亚特区联邦地区法院裁定其关税政策“违法”的命令...
关税政策推进受阻 特朗普政府求... 当地时间6月2日,美国特朗普政府请求联邦上诉法院阻止此前哥伦比亚特区联邦地区法院裁定其关税政策“违法...
英国央行Catherine M... 英国央行Catherine Mann:必须考虑量化紧缩(QT)和一系列利率政策的影响。
原创 香... 在新加坡香格里拉酒店举行的亚太安全论坛上,美国国防部长赫格塞思(Lloyd Austin)于5月31...
美方掐断C919发动机技术,中... 在国际舞台上,当两大经济体相遇,总会引发一场关于技术、资本和市场的角力。最近,中美之间的博弈又一次走...
6800万镑!埃泽“豪言”震惊... 足坛风云变幻,总有那么些球员,他们的名字与豪门绯闻紧密相连,每一次表态都能在转会市场上掀起波澜。这不...