Java中的懶漢和餓漢是兩種單例模式的實(shí)現(xiàn)方式。單例模式是指一個(gè)類只被允許創(chuàng)建一個(gè)實(shí)例,這種設(shè)計(jì)模式在很多場景下是非常有用的。
餓漢模式相對比較簡單,它的內(nèi)部靜態(tài)成員變量是在類加載時(shí)就已經(jīng)實(shí)例化了。這樣的話,每次使用都可以直接返回這個(gè)實(shí)例。代碼實(shí)現(xiàn)如下:
public class SingletonHungry { private static final SingletonHungry instance = new SingletonHungry(); // 禁止實(shí)例化 private SingletonHungry() {} public static SingletonHungry getInstance() { return instance; } }
懶漢模式的實(shí)現(xiàn)稍微復(fù)雜一些。它的內(nèi)部靜態(tài)成員變量是在第一次使用時(shí)才實(shí)例化的。這樣做的好處是可以延遲實(shí)例化,只在需要時(shí)才創(chuàng)建對象。但是需要注意并發(fā)情況下的線程安全問題。代碼實(shí)現(xiàn)如下:
public class SingletonLazy { private static SingletonLazy instance; // 禁止實(shí)例化 private SingletonLazy() {} public static synchronized SingletonLazy getInstance() { if (instance == null) { instance = new SingletonLazy(); } return instance; } }
需要注意的是,如果在多線程的情況下,可能會(huì)出現(xiàn)多個(gè)線程同時(shí)進(jìn)行判斷,從而創(chuàng)建出多個(gè)實(shí)例的情況。解決方法有多種,可以使用雙重校驗(yàn)鎖、靜態(tài)內(nèi)部類、枚舉等方式保證線程安全。
上一篇layui php 上傳
下一篇layui查詢PHP