剑指Offer_2_实现Singleton模式
来源:互联网 发布:cloud9 ide java 编辑:程序博客网 时间:2024/04/28 01:16
不好的解法:
- 方法一:仅支持单线程的单例模式,只有if判断。
public class NotSafeSingleton{ private static NotSafeSingleton instance = null; private NotSafeSingleton(){} public static NotSafeSingleton getInstance() { if (instance == null) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } instance = new NotSafeSingleton(); } return instance; }}
- 方法二:支持多线程,但是效率很低的同步方法块。
可行的解法:
- 方法三:外层if(减少同步代码块被访问的次数) + 同步代码块(防止多线程访问) + 内层if(保证单例)
public class Singleton{ private static Singleton instance = null; private static final Object LOCKOBJ = new Object(); private Singleton(){} public static Singleton getInstance() { if (instance == null) { synchronized (LOCKOBJ) { if (instance == null) { instance = new Singleton(); } } } return instance; }}
推荐的解法:
- 方法四:饿汉式:线程安全,但是实例创建过早,当调用其中的某个静态方法时,实例就会被创建,但可能我们并不想创建这个实例
public class HungrySingleton{ private static final HungrySingleton instance = new HungrySingleton(); private HungrySingleton() { } public static HungrySingleton getInstance() { return instance; }}
- 方法五:静态内部类:内部内部类会在被调用的时候 初始化外部类的静态实例,有效防止了过早创建实例的问题,且线程安全
public class InnerSingleton{ private InnerSingleton(){} public static InnerSingleton getInstance() { return SingletonHolder.instance; } private static class SingletonHolder { private static final InnerSingleton instance = new InnerSingleton(); }}
- 方法六:枚举方法(jdk1.5以后,推荐方法)
0 0
- 剑指Offer_2_实现Singleton模式
- 剑指offer2 - 实现singleton模式
- 剑指offer - 实现Singleton模式
- 剑指offer2:实现Singleton模式
- 剑指offer(1) - 实现Singleton模式
- 剑指Offer系列---(4)实现Singleton模式
- 剑指offer 2. 实现Singleton模式
- 剑指offer---实现Singleton模式(2)
- Delphi实现Singleton模式
- Singleton模式实现分析
- 实现Singleton模式
- Singleton 模式实现
- C++实现Singleton模式
- Singleton模式实现方式
- Singleton模式实现
- 实现Singleton模式
- C#实现Singleton模式
- 实现Singleton模式
- 操作系统实验二
- C++Primer第五版——习题答案+详解(完整版)
- 《ACM程序设计》书中题目 O-15 color of balloons
- Comparable与Comparator的区别
- C指针基础(四)
- 剑指Offer_2_实现Singleton模式
- LeetCode 162. Find Peak Element
- Kalman滤波算法解释与实现
- WDM与NDIS中的同步机制
- jQuery EasyUI详解-EasyUI下拉框combobox
- 如何获取手机的ip地址
- 使用ionic2接入百度地图
- linux静态库与共享库
- mybatis-generator