Rumah >Java >javaTutorial >Item Gunakan permulaan malas dengan berhati-hati
Apakah inisialisasi malas?
Amalan dan Contoh Terbaik
Contoh:
private final FieldType field = computeFieldValue();
Gunakan permulaan biasa untuk kebanyakan medan, melainkan diperlukan sebaliknya.
Contoh:
private FieldType field; synchronized FieldType getField() { if (field == null) { field = computeFieldValue(); } return field; }
3. Amalan Kelas Pembawa (Untuk Medan Statik)
Contoh:
private static class FieldHolder { static final FieldType field = computeFieldValue(); } static FieldType getField() { return FieldHolder.field; }
Kelebihan: Memulakan kelas hanya apabila medan diakses, dengan kos minimum selepas permulaan.
4. Amalan Semak Berganda (Sebagai contoh Medan)
Contoh:
private volatile FieldType field; FieldType getField() { FieldType result = field; if (result == null) { // Primeira verificação (sem bloqueio) synchronized (this) { result = field; if (result == null) { // Segunda verificação (com bloqueio) field = result = computeFieldValue(); } } } return result; }
5. Amalan Semakan Tunggal (Permulaan Berulang Dibenarkan)
Contoh
private volatile FieldType field; FieldType getField() { if (field == null) { // Verificação única field = computeFieldValue(); } return field; }
6. Amalan Semak Tunggal Berani
Contoh:
private FieldType field; FieldType getField() { if (field == null) { // Sem volatile field = computeFieldValue(); } return field; }
Pertimbangan Umum
Pertukaran:
Penyegerakan Berbilang Benang:
Penggunaan Pilihan:
Ringkasan Akhir
Atas ialah kandungan terperinci Item Gunakan permulaan malas dengan berhati-hati. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!