java面试题网

普通会员

118

帖子

12

回复

165

积分

楼主
发表于 2018-05-25 14:23:46 | 查看: 1341| 回复: 1

5种实现方式 ?

1.饿汉模式(调用效率高,但是不能延时加载):

2.懒汉模式(调用效率不高,但是能延时加载):

3.双重检测锁模式(由于JVM底层模型原因,偶尔会出问题,不建议使用):

4.静态内部类式(线程安全,调用效率高,可以延时加载):

5.枚举类(线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用):

如何选用:

    单例对象 占用资源少,不需要延时加载,枚举 好于 饿汉

    单例对象 占用资源多,需要延时加载,静态内部类 好于 懒汉式 

单例模线程安全吗?  

    不安全 。

一般如何保证它线程安全 ?  

    double-check 双重检查锁定  。

修饰符 volatile  有什么作用 ?

    能保证被它修饰的成员变量可以被多个线程正确的处理。Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比synchronized的开销更小



普通会员

216

帖子

75

回复

160

积分
沙发
发表于 2019-05-05 16:21:45

写一个单例类

单例模式主要作用是保证在Java应用程序中,一个类只有一个实例存在。下面给出两种不同形式的单例:
第一种形式:饿汉式单例
public class Singleton {
private Singleton(){}
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}

第二种形式:懒汉式单例
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static synchronized Singleton getInstance(){
if (instance==null) instance=newSingleton();
return instance;
}
}
单例的特点:外界无法通过构造器来创建对象,该类必须提供一个静态方法向外界提供该类的唯一实例。
【补充】用Java进行服务器端编程时,使用单例模式的机会还是很多的,服务器上的资源都是很宝贵的,对于那些无状态的对象其实都可以单例化或者静态化(在内存中仅有唯一拷贝),如果使用了spring这样的框架来进行对象托管,Spring的IoC容器在默认情况下对所有托管对象都是进行了单例化处理的。 

您需要登录后才可以回帖 登录 | 立即注册

java面试题网无聊看看网与java建站系统提供技术支持V2.1 网站地图 © 2016-2018