懒汉式单例模式,懒汉式单例模式代码

http://www.itjxue.com  2023-01-15 07:16  来源:未知  点击次数: 

单例设计模式之懒汉式和饿汉式

懒汉式

public class LazySingle {

private LazySingle() {}

private static LazySinglesingle =null;

? ? public static?synchronized? LazySinglegetInstance() {

if (single ==null) {

single =new LazySingle();

? ? ? ? }

return single;

? ? }

}

饿汉式

public class ESingle {

private ESingle(){}

private static final ESingleeSingle =new ESingle();

? ? public static ESinglegetInstance(){

return eSingle;

? ? }

}

懒汉式和饿汉式区别:

实例化方面:懒汉式默认不会实例化,外部什么时候调用什么时候new。饿汉式在类加载的时候就实例化,并且创建单例对象。

线程安全方面:饿汉式线程安全 (在线程还没出现之前就已经实例化了,因此饿汉式线程一定是安全的)。懒汉式线程不安全( 因为懒汉式加载是在使用时才会去new 实例的,那么你去new的时候是一个动态的过程,是放到方法中实现的,比如:public static synchronized Lazy getInstance(){? ?if(lazy==null){??lazy=new Lazy(); } 如果这个时候有多个线程访问这个实例,这个时候实例还不存在,还在new,就会进入到方法中,有多少线程就会new出多少个实例。一个方法只能return一个实例,那最终return出哪个呢?是不是会覆盖很多new的实例?这种情况当然也可以解决,那就是加同步锁,避免这种情况发生) 。

执行效率上:饿汉式没有加任何的锁,因此执行效率比较高。懒汉式一般使用都会加同步锁,效率比饿汉式差。

性能上:饿汉式在类加载的时候就初始化,不管你是否使用,它都实例化了,所以会占据空间,浪费内存。懒汉式什么时候需要什么时候实例化,相对来说不浪费内存。

单例模式中,饿汉式和懒汉式的区别?为什么推荐说 用饿汉模式?

懒汉式是,只有用到这个用例的时候,再将他实例化,不会浪费,所以效率要高一些。

饿汉式则是程序只要开始,就将他实例化,到用到他的时候就省去了再实例的时间,所以速度和反应快。这是这俩的区别

不过差距不会那么明显。

但是大项目,在效率上体现的就有点明显了

祝你好运

单例模式中,饿汉式和懒汉式有什么区别

懒汉式是,只有用到这个用例的时候,再将他实例化,不会浪费,所以效率要高一些。

饿汉式则是程序只要开始,就将他实例化,到用到他的时候就省去了再实例的时间,所以速度和反应快。这是这俩的区别

不过差距不会那么明显。

但是大项目,在效率上体现的就有点明显了

祝你好运

手写单例模式(饿汉和饱汉模式)和工厂模式

?(1)单例饿汉模式://饿汉式单例类.在类初始化时,已经自行实例化?

public class Singleton1

{? //私有的默认构造子

private Singleton1() {}??//已经自行实例化?

?private static final Singleton1 single = new Singleton1();? //静态工厂方法?

?public static Singleton1 getInstance() { return single;? } }

(2)懒汉模式://懒汉式单例类.在第一次调用的时候实例化?

Java初高级一起学习分享,共同学习才是最明智的选择,喜欢的话可以我的学习群64弍46衣3凌9,或加资料群69似64陆0吧3(进群备注平台名)

?public class Singleton2

{? //私有的默认构造子?

private Singleton2() {}? //注意,这里没有final?

?private static Singleton2 single=null;? //静态工厂方法?

?public synchronized static Singleton2 getInstance() {? if (single == null) { single = new Singleton2();? }? return single;? }? }

(3)工厂模式:

interface IFactory{ public IProduct createProduct();}

Class Factory implements IFactory{ public IProduct createProduct(){return new Product();}}

Public class client

{ Public Static void main (String [] args)

{IFactory factory=new Factory(); IProduct product=factory.createProduct(); product.ProductMethod();}}

单例中懒汉和饿汉的本质区别?

1、饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变。懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。

2、从实现方式来讲他们最大的区别就是懒汉式是延时加载,他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,饿汉式无需关注多线程问题,写法简单明了,能用则用。真正用到的时候才去建这个单例对象,“饿汉式”是在不管用不用得上,一开始就建立这个单例对象。

扩展资料

1、单件模式用途:单件模式属于工厂模式的特例,只是它不需要输入参数并且始终返回同一对象的引用。单件模式能够保证某一类型对象在系统中的唯一性,即某类在系统中只有一个实例。

2、它的用途十分广泛,打个比方,我们开发了一个简单的留言板,用户的每一次留言都要将留言信息写入到数据库中,最直观的方法是没次写入都建立一个数据库的链接。

3、这是个简单的方法,在不考虑并发的时候这也是个不错的选择。但实际上,一个网站是并发的,并且有可能是存在大量并发操作的。如果我们对每次写入都创建一个数据库连接,那么很容易的系统会出现瓶颈,系统的精力将会很多的放在维护链接上而非直接查询操作上。这显然是不可取的。

参考资料来源:百度百科-单例模式

(责任编辑:IT教学网)

更多

推荐PowerPoint文章