單例有多種的寫法,本例是懶漢式單例的一種寫法。在高并發(fā)環(huán)境下需要注意的是:
1.單例在并發(fā)訪問并調(diào)用其相應(yīng)的getInstance方法的時(shí)候也會造成創(chuàng)建多個(gè)實(shí)例對象,加鎖是必要的。
2.使用synchronized是比較好的解決方案,優(yōu)點(diǎn)是代碼簡潔,缺點(diǎn)是在拋出異常的時(shí)候不能處理維護(hù)使系統(tǒng)處于良好狀態(tài)。
3.顯示的lock設(shè)定是良好的解決方案。
使用lock的代碼如下:
package demo; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 參考使用 * @author Watson_Xu * @date 2012-1-8 下午04:31:09 */ public final class SingletonContext { private static SingletonContext sc = null; private SingletonContext() { } private static Lock lock = new ReentrantLock(); public static SingletonContext getInstance() { if(sc == null) { lock.lock(); if(sc == null) { try{ sc = new SingletonContext(); } finally { lock.unlock(); } } } return sc; } }使用synchronized的時(shí)候代碼如下:
package demo; /** * 參考使用 * * @author Watson_Xu * @date 2012-1-8 下午04:31:09 */ public final class SingletonContext { private static SingletonContext sc = null; private SingletonContext() { } public static synchronized SingletonContext getInstance() { if(null == sc) { sc = new SingletonContext(); } return new SingletonContext(); } } 查看更多Java的語法,大家可以關(guān)注:《Thinking in Java 中文手冊》、《JDK 1.7 參考手冊官方英文版》、《JDK 1.6 API java 中文參考手冊》、《JDK 1.5 API java 中文參考手冊》,也希望大家多多支持武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選