单例中懒汉和饿汉的本质区别?
发布网友
发布时间:2022-04-20 09:04
我来回答
共2个回答
热心网友
时间:2023-10-02 18:42
饿汉式:
public
class
Singleton{
private
static
Singleton
singleton
=
new
Singleton
();
private
Singleton
(){}
public
Singleton
getInstance(){return
singletion;}
}
懒汉式:
public
class
Singleton{
private
static
Singleton
singleton
=
null;
public
static
synchronized
synchronized
getInstance(){
if(singleton==null){
singleton
=
new
Singleton();
}
return
singleton;
}
}
比较:
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
推荐使用第一种
热心网友
时间:2023-10-02 18:42
懒汉式是,只有用到这个用例的时候,再将他实例化,不会浪费,所以效率要高一些。
饿汉式则是程序只要开始,就将他实例化,到用到他的时候就省去了再实例的时间,所以速度和反应快。这是这俩的区别
不过差距不会那么明显。
但是大项目,在效率上体现的就有点明显了
祝你好运
热心网友
时间:2023-10-02 18:42
饿汉式:
public
class
Singleton{
private
static
Singleton
singleton
=
new
Singleton
();
private
Singleton
(){}
public
Singleton
getInstance(){return
singletion;}
}
懒汉式:
public
class
Singleton{
private
static
Singleton
singleton
=
null;
public
static
synchronized
synchronized
getInstance(){
if(singleton==null){
singleton
=
new
Singleton();
}
return
singleton;
}
}
比较:
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
推荐使用第一种
热心网友
时间:2023-10-02 18:42
懒汉式是,只有用到这个用例的时候,再将他实例化,不会浪费,所以效率要高一些。
饿汉式则是程序只要开始,就将他实例化,到用到他的时候就省去了再实例的时间,所以速度和反应快。这是这俩的区别
不过差距不会那么明显。
但是大项目,在效率上体现的就有点明显了
祝你好运