Java之线程安全的单例模式
来源:互联网 发布:淘宝可以朋友代付吗 编辑:程序博客网 时间:2024/05/18 15:09
面试的时候,常常会被问到这样一个问题:请您写出一个单例模式(Singleton Pattern)吧。好吧,写就写,这还不容易。顺手写一个:
- public
final class EagerSingleton - {
-
private static EagerSingleton newsingObj = EagerSingleton(); -
-
private EagerSingleton() -
} -
-
public static EagerSingleton getSingleInstance() -
singObj; -
} - }
这种写法就是所谓的饥饿模式,每个对象在没有使用之前就已经初始化了。这就可能带来潜在的性能问题:如果这个对象很大呢?没有使用这个对象之前,就把它加载到了内存中去是一种巨大的浪费。针对这种情况,我们可以对以上的代码进行改进,使用一种新的设计思想——延迟加载(Lazy-load Singleton)。
- public
final class LazySingleton - {
-
private static LazySingleton null;singObj = -
-
private LazySingleton() -
} -
-
public static LazySingleton getSingleInstance() -
if(null == singObj ) singObj = new LazySingleton(); -
return singObj; -
} - }
- public
final class ThreadSafeSingleton - {
-
private static ThreadSafeSingleton null;singObj = -
-
private ThreadSafeSingleton() -
} -
-
public static Synchronized ThreadSafeSingleton getSingleInstance() -
if(null == singObj ) singObj = new ThreadSafeSingleton(); -
singObj; -
} - }
- public
final class DoubleCheckedSingleton - {
-
private static DoubleCheckedSingletonsi null;ngObj = -
-
private DoubleCheckedSingleton() -
} -
-
public static DoubleCheckedSingleton getSingleInstance() -
if(null == singObj ) { -
-
if(null == singObj) -
DoubleCheckedSingleton(); -
-
} -
return singObj; -
} - }
这种写法使得只有在加载新的对象进行同步,在加载完了之后,其他线程在第九行就可以判断跳过锁的的代价直接到第15行代码了。做到很好的并发度。
- public
class Singleton - {
-
private static class SingletonHolder -
{ -
public final static Singleton newinstance = Singleton(); -
} -
-
public static Singleton getInstance() -
{ -
return SingletonHolder.instance; -
} - }
- Java之线程安全的单例模式
- 【Java多线程】之八:单例模式的线程安全
- Java之线程安全的单例设计模式
- java线程安全的单例模式
- java线程安全的单例模式
- java 线程安全的单例模式
- java线程安全的单例模式
- java线程安全的单例模式
- java单例模式的线程安全
- java 单例模式之线程安全的饿汉模式和懒汉模式
- Java单例模式——互斥锁-单例之懒汉式的线程安全
- 单例模式之懒汉模式的线程安全解决方法
- java单例模式和线程安全的单列模式
- Java的单例模式是不是线程安全的?
- 单例模式之四种线程安全的实现
- 单例模式之线程安全解析
- 线程安全之单例模式
- 单例模式之线程安全
- C++ 嵌套类
- 2013年工作中遇到的20个问题:101-120
- 使用CXF生成客户端
- PHP中 getenv()函数 (环境变量)
- 数据库三大范式
- Java之线程安全的单例模式
- Java基础知识_网络编程
- 一些硬件相关的概念
- ubuntu下面ngnix的安装配置
- 自动化测试--selenium-webDriver
- 最给力的java REST入门:使用 JAX-RS 简化 REST 应用开发(转自代码商人)
- 暑假第三场F
- spring文件最简单的使用
- IDEA中文项目问题解决小记