Mod lapar juga dipanggil mod pramuat Ia secara langsung mencipta dan memulakan objek tunggal apabila kelas dimuatkan, jadi ia tidak mempunyai masalah keselamatan benang. Ia bergantung pada mekanisme kelas ClassLoader dan hanya dimuatkan sekali apabila program bermula, jadi tiada isu keselamatan benang Kod pelaksanaannya adalah seperti berikut:
public class Singleton { // 1.防止外部直接 new 对象破坏单例模式 private Singleton() {} // 2.通过私有变量保存单例对象 private static Singleton instance = new Singleton(); // 3.提供公共获取单例对象的方法 public static Singleton getInstance() { return instance; } }
Kelebihan<. 🎜>: Pelaksanaan Mudah dan tiada isu keselamatan benang. Kelemahan: Objek dicipta apabila kelas dimuatkan Jika ia tidak digunakan selepas penciptaan, ia akan menyebabkan pembaziran sumber.
2. Mod malas Mod malas dan mod lapar adalah sebaliknya Mod malas memuatkan (pemuatan tertunda), yang bermaksud ia hanya dimuatkan apabila ia dimuatkan. buat kali pertama. Ia akan dimulakan hanya apabila digunakanKod pelaksanaannya adalah seperti berikut:
public class Singleton { // 1.防止外部直接 new 对象破坏单例模式 private Singleton() {} // 2.通过私有变量保存单例对象 private static volatile Singleton instance = null; // 3.提供公共获取单例对象的方法 public static Singleton getInstance() { if (instance == null) { // 第一次效验 synchronized (Singleton.class) { if (instance == null) { // 第二次效验 instance = new Singleton(); } } } return instance; } }
Mod malas menggunakan kunci pengesahan berganda dan tidak menentu. untuk memastikan keselamatan benang , seperti yang dapat dilihat daripada kod di atas, sama ada mod lelaki lapar atau mod lelaki malas, langkah pelaksanaannya adalah sama:
Kelas dalaman statik boleh memastikan keselamatan benang dan pemuatan malas Ia hanya akan melepasi mekanisme ClassLoader apabila dipanggil untuk memuatkan dan mulakan kelas statik dalaman, jadi ia selamat untuk benang Kod pelaksanaan mod ini adalah seperti berikut:
public class Singleton { // 1.防止外部直接 new 对象破坏单例模式 private Singleton() { } // 2.静态内部类 private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } // 3.提供公共获取单例对象的方法 public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } }
Penghitungan juga digunakan buat kali pertama. Ia akan dimuatkan dan dimulakan oleh mesin maya Java apabila ia digunakan, jadi ia juga selamat untuk benang dan dimuatkan malas Kod pelaksanaannya adalah seperti berikut:
public enum EnumSingleton { INSTANCE; public EnumSingleton getInstance(){ return INSTANCE; } }
Atas ialah kandungan terperinci Kaedah pelaksanaan dan kaedah penulisan biasa corak tunggal Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!