Rumah >Java >javaTutorial >Item Gunakan permulaan malas dengan berhati-hati

Item Gunakan permulaan malas dengan berhati-hati

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-09 14:03:42306semak imbas

Item  Utilize a inicialização preguiçosa com parcimônia

Apakah inisialisasi malas?

  • Definisi: Tangguhkan permulaan medan sehingga ia diakses buat kali pertama.
  • Faedah: Mengelakkan permulaan yang tidak perlu jika medan tidak pernah digunakan.
  • Aplikasi: Digunakan untuk medan statik dan contoh.

Amalan dan Contoh Terbaik

  1. But Biasa (Diutamakan) Mudah dan berkesan.

Contoh:

private final FieldType field = computeFieldValue();

Gunakan permulaan biasa untuk kebanyakan medan, melainkan diperlukan sebaliknya.

  1. Permulaan Malas dengan Getter Disegerakkan Bila hendak digunakan: Untuk menyelesaikan pekeliling permulaan.

Contoh:

private FieldType field;

synchronized FieldType getField() {
    if (field == null) {
        field = computeFieldValue();
    }
    return field;
}

3. Amalan Kelas Pembawa (Untuk Medan Statik)

  • Bila hendak digunakan: Inisialisasi malas yang cekap 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)

  • Bila hendak digunakan: Untuk prestasi pada permulaan malas pada medan contoh.

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)

  • Bila hendak digunakan: Medan yang boleh bertolak ansur dengan pemulaan berulang.

Contoh

private volatile FieldType field;

FieldType getField() {
    if (field == null) { // Verificação única
        field = computeFieldValue();
    }
    return field;
}

6. Amalan Semak Tunggal Berani

  • Bila hendak digunakan: Hanya jika anda bertolak ansur dengan permulaan tambahan dan jika jenis medan adalah primitif selain panjang atau berganda.

Contoh:

private FieldType field;

FieldType getField() {
    if (field == null) { // Sem volatile
        field = computeFieldValue();
    }
    return field;
}

Pertimbangan Umum

Pertukaran:

  • Pengamalan yang malas meminimumkan kos permulaan tetapi boleh meningkatkan kos akses medan.
  • Nilai dengan ukuran prestasi.

Penyegerakan Berbilang Benang:

  • Penting untuk mengelakkan pepijat yang serius.
  • Gunakan amalan selamat (cth., tidak menentu, kunci).

Penggunaan Pilihan:

  • Medan Statik: Latihan kelas pembawa.
  • Medan Instance: Semak Dua Kali.
  • Permulaan Berulang Dibenarkan: Semakan sekali.

Ringkasan Akhir

  • But seperti biasa apabila boleh.
  • Gunakan permulaan malas hanya apabila perlu untuk prestasi atau untuk menyelesaikan isu pekeliling

Atas ialah kandungan terperinci Item Gunakan permulaan malas dengan berhati-hati. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn