Saya percaya semua orang sudah terbiasa dengan model Singleton, dan metode implementasinya biasanya dibagi menjadi dua jenis berikut:
Salinan kode adalah sebagai berikut:
// Implementasi malas
Singleton kelas publik {
instance singleton statis pribadi = null;
singleton pribadi () {}
newinstance statis publik () {
if (null == instance) {
instance = singleton baru ();
}
instance return;
}
public void dosomething () {
// Lakukan sesuatu ...
}
}
// gaya Cina lapar
Singleton kelas publik {
private static singleton instance = singleton baru ();
singleton pribadi () {}
public static singleton newInstance () {
instance return;
}
public void dosomething () {
// Lakukan sesuatu ...
}
}
Dalam penggunaan mode bunga tunggal, gaya malas dan lapar memiliki skenario aplikasi yang berbeda. untuk menggunakannya. Hanya ketika proyek dimulai akan dibuat.
Dalam dua mode di atas, jika Anda multi-threaded, tidak akan ada masalah dengan gaya pria lapar, karena JVM hanya akan memuat kelas minat tunggal sekali, tetapi gaya pria malas mungkin memiliki masalah berulang kali menciptakan minat tunggal tunggal tunggal objek, yaitu utas tidak aman.
Jadi apakah ada cara untuk membuat mode kepentingan tunggal dari benang-benang yang haus-gaya? Tentu saja ada jawaban. Dalam banyak kasus, JVM telah memberi kami kontrol sinkronisasi, seperti:
A.
b. Saat mengakses bidang terakhir, dll.
Ketika JVM memuat kelas, itu akan memastikan bahwa data disinkronkan.
Gunakan kelas internal tingkat kelas untuk membuat instance objek di kelas internal ini. Dengan cara ini, selama Anda tidak menggunakan kelas internal tingkat kelas, Anda tidak akan membuat instance objek, dengan demikian mencapai pemuatan malas malas dan keselamatan benang.
Salinan kode adalah sebagai berikut:
Singleton kelas publik {
// Kelas Dalam, objek bunga sederhana akan dibuat hanya saat kelas dalam dimuat
Private Static Class SingletonHolder {
Public Static Singleton Instance = Singleton baru ();
}
singleton pribadi () {}
public static singleton newInstance () {
mengembalikan singletonHolder.instance;
}
public void dosomething () {
// Lakukan sesuatu
}
}
Ini dapat mewujudkan model harga tunggal yang aman dari utas.
Selain itu, kami juga dapat mengimplementasikan mode bunga tunggal melalui jenis enumerasi, yang juga merupakan cara yang lebih disarankan.
Menerapkan pola singleton menggunakan tipe enum adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
Publik enum singleton {
// Tentukan elemen yang disebutkan, ini adalah contoh singleton
contoh;
public void dosomething () {
// Lakukan sesuatu ...
}
}
Oke, mode singleton diperkenalkan di sini.