「java饿汉式」java饿汉式怎么保证是单例的
今天给各位分享java饿汉式的知识,其中也会对java饿汉式怎么保证是单例的进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、JAVA 懒汉式 饿汉式 区别
- 2、Java单例模式饿汉式会有线程安全问题吗
- 3、java 在单例模式饿汉式中使用成员变量是线程安全的吗?
- 4、java开发单利模式的饿汉模式和懒汉模式的区别
- 5、请教 Java设计模式中的单例模式的懒汉式和饿汉式名字的由来,为什么叫懒汉式 饿汉式?
- 6、JAVA单例模式有哪些?
JAVA 懒汉式 饿汉式 区别
懒汉:开始不初始化
public class Yugi{
private static Yugi yugi = null;
private Yugi(){
}
public static Yugi getInstance(){
yugi = new Yugi();
return yugi;
}
}
饿汉:一开始就初始化
public class Yugi{
private static Yugi yugi = new Yugi();
private Yugi(){}
public static Yugi getInstance(){
return yugi;
}
}
Java单例模式饿汉式会有线程安全问题吗
标准的答案!饿汉式没有线程安全问题,懒汉式需要双重锁定解决可能的线程安全问题。
饿汉式的缺点是类一加载就实例化,提前占用系统资源
java 在单例模式饿汉式中使用成员变量是线程安全的吗?
你好,很高兴回答你的问题。
如果没有做同步处理,是线程不安全的。
获取单例对象的方法需要做同步处理。
如果有帮助到你,请点击采纳。
java开发单利模式的饿汉模式和懒汉模式的区别
所谓懒汉式,就是程序比较懒,只有需要他的时候,才会创建对象,如果有了,就不在创建,这个类的构造函数一定是私有的。所以在创建对象时,需要进行检查,所以这时候很慢,一旦对象完成创建,加载类时,速度很快。至于饿汉式,就是这个类时刻准备着,一旦加载这个类,立马创建对象,所有类很多的时候,加载显的程序运行缓慢,这个类的构造函数也是私有的。
请教 Java设计模式中的单例模式的懒汉式和饿汉式名字的由来,为什么叫懒汉式 饿汉式?
所谓“懒汉式”与“饿汉式”的区别,是在与建立单例对象的时间不同。
“懒汉式”是在你真正用到的时候才去建这个单例对象:
比如:有个单例对象
private static Student student = null; //不建立对象
Student getInstance(){
if(student == null) { //先判断是否为空
student = new Student(); //懒汉式做法
}
return student;
}
“饿汉式”是在不管你用的用不上,一开始就建立这个单例对象:
比如:有个单例对象
private static Student student = new Student(); //建立对象
Student getInstance(){
return student; //直接返回单例对象
}
JAVA单例模式有哪些?
一、懒汉式单例
在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。
public
class
LazySingleton
{
/**
*
私有静态对象,加载时候不做初始化
*/
private
static
LazySingleton
m_intance=null;
/**
*
私有构造方法,避免外部创建实例
*/
private
LazySingleton(){
}
/**
*
静态工厂方法,返回此类的唯一实例.
*
当发现实例没有初始化的时候,才初始化.
*/
synchronized
public
static
LazySingleton
getInstance(){
if(m_intance==null){
m_intance=new
LazySingleton();
}
return
m_intance;
}
}
二、饿汉式单例
在类被加载的时候,唯一实例已经被创建。
public
class
EagerSingleton
{
/**
*
私有的(private)唯一(static
final)实例成员,在类加载的时候就创建好了单例对象
*/
private
static
final
EagerSingleton
m_instance
=
new
EagerSingleton();
/**
*
私有构造方法,避免外部创建实例
*/
private
EagerSingleton()
{
}
/**
*
静态工厂方法,返回此类的唯一实例.
*
@return
EagerSingleton
*/
public
static
EagerSingleton
getInstance()
{
return
m_instance;
}
}
**************************************************************************************
懒汉方式,指全局的单例实例在第一次被使用时构建;
饿汉方式,指全局的单例实例在类装载时构建
**************************************************************************************
三、登记式单例
这个单例实际上维护的是一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。
public
class
RegSingleton
{
/**
*
登记薄,用来存放所有登记的实例
*/
private
static
Map
m_registry
=
new
HashMap();
//在类加载的时候添加一个实例到登记薄
static
{
RegSingleton
x
=
new
RegSingleton();
m_registry.put(x.getClass().getName(),
x);
}
/**
*
受保护的默认构造方法
*/
protected
RegSingleton()
{
}
/**
*
静态工厂方法,返回指定登记对象的唯一实例;
*
对于已登记的直接取出返回,对于还未登记的,先登记,然后取出返回
*
@param
name
*
@return
RegSingleton
*/
public
static
RegSingleton
getInstance(String
name)
{
if
(name
==
null)
{
name
=
"RegSingleton";
}
if
(m_registry.get(name)
==
null)
{
try
{
m_registry.put(name,
(RegSingleton)
Class.forName(name).newInstance());
}
catch
(InstantiationException
e)
{
e.printStackTrace();
}
catch
(IllegalAccessException
e)
{
e.printStackTrace();
}
catch
(ClassNotFoundException
e)
{
e.printStackTrace();
}
}
return
m_registry.get(name);
}
/**
*
一个示意性的商业方法
*
@return
String
*/
public
String
about()
{
return
"Hello,I
am
RegSingleton!";
}
}
java饿汉式的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java饿汉式怎么保证是单例的、java饿汉式的信息别忘了在本站进行查找喔。
发布于:2022-11-29,除非注明,否则均为
原创文章,转载请注明出处。