@HUST-SuWB
2015-02-10T15:21:05.000000Z
字数 1029
阅读 447
读书笔记
出自《剑指Offer》的面试题2,原题题目为:设计一个类,我们只能生成该类的一个实例。
一看到这道题,第一反应是完全没有思路。本来就对设计模式不够熟悉,再加上平常的业务处理中根本不会有涉及到这类需求的问题,因此,从来没有考虑过该如何去实现单例模式。但是,如果静下心来思考的话,生成类的实例必须调用构造方法,那么似乎可以通过私有化构造方法的方式让构造方法对外隔离,剩下的方式就是这唯一的一个实例怎么生成了。如果在类里定义静态的实例,就可以在需要的时候创建该实例。
/*** 《剑指Offer》面试题2* @author SuWB**/public class Singleton {private Singleton(){}private static Singleton singleton = null;public static Singleton getSingleton(){if(singleton == null){singleton = new Singleton();}return singleton;}}
上面的代码是第一反应,但是仔细思考的话,会发现这里面还是有很多问题,其中最显著的问题在于,这段代码只能在单线程的情况下运行,那么,如果考虑多线程的话,要怎么办呢。这时候同步锁就派上用场了。
import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/*** 《剑指Offer》面试题2* @author SuWB* 适用多线程*/public class Singleton_Mutiple{private Singleton_Mutiple(){}private static Singleton_Mutiple singleton = null;public static Singleton_Mutiple getSingleton(){if(singleton == null){Lock lock = new ReentrantLock();lock.lock();try{if(singleton == null){singleton = new Singleton_Mutiple();}}catch(Exception e){e.printStackTrace();}finally{lock.unlock();}}return singleton;}}
个人觉得能考虑到这个地步已经足够了。