發表文章

目前顯示的是 8月, 2013的文章

JAVA中Singleton模式實用案例

圖片
工作上為了實作銀行內部使用的存摺磁條讀寫器的程式,因此需要防範不同程式間搶資源的狀況。 架構為多台client連接到同一台server,server上連接一台共用的磁刷機,由同一程式做外部裝置的控管。 為了讓某項周邊裝置同時間只有一個instance可存取,利用Singleton模式可以達到此效果。 網路上的範例: class CommUtils{ //使用Singleton 模式使得一個類別只有能一個實例。用getInstance取得控制權 private static CommUtils instance = null; private CommUtils (){} public static CommUtils getInstance() { if (instance == null){ synchronized( CommUtils .class){ if(instance == null) { instance = new CommUtils (); } } } return instance; } ... } 這寫法,能夠給該物件使private static物件存在唯一的reference位置,此方式在同一個thread當中同時呼叫CommUtils,第一個thread順利取得instance,第二個thread則因為判斷出instance不為null的同一個物件,會回傳同一個instance。 但當不同的process執行時,則因為共用到同一個PORT而先出PortInUseException,不進入到此程式中。 事實上Synchronized內區塊在實測中無測試到。因此可用以下寫法簡化,不需要lazy initialization。 public class CLASS { static private CLASS obj= new CLASS(); private CLASS() { } static public CLASS getIn