java面试题网

普通会员

108

帖子

11

回复

138

积分

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

5种实现方式 ?

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

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

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

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

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

如何选用:

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

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

单例模线程安全吗?  

    不安全 。

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

    double-check 双重检查锁定  。

修饰符 volatile  有什么作用 ?

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



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

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