Rumah >Java >javaTutorial >Bolehkah Pembina Disegerakkan di Java?

Bolehkah Pembina Disegerakkan di Java?

Susan Sarandon
Susan Sarandonasal
2024-10-05 14:07:31308semak imbas

Can Constructors Be Synchronized in Java?

1. Memahami Penyegerakan Pembina

1.1 Apakah itu Penyegerakan Pembina?

Penyegerakan pembina melibatkan memastikan bahawa hanya satu urutan boleh melaksanakan bahagian kod tertentu pada satu masa. Dalam konteks pembina, ini bermakna memastikan bahawa hanya satu utas boleh melaksanakan kod pembina untuk objek tertentu.

1.2 Mengapa Menyegerakkan Pembina?

Dalam persekitaran berbilang benang, berbilang benang mungkin cuba mencipta tika kelas secara serentak. Jika pembina mengubah suai sumber yang dikongsi atau melakukan operasi kritikal, penyegerakan mungkin diperlukan untuk mengelakkan ketidakkonsistenan atau perbalahan sumber.

1.3 Bagaimana untuk Menyegerakkan Pembina?

Anda boleh menyegerakkan pembina menggunakan kata kunci disegerakkan. Berikut ialah contoh asas:


public class SynchronizedConstructorExample {
    public SynchronizedConstructorExample() {
        synchronized (this) {
            // Critical section: code that must be executed by only one thread at a time
            System.out.println("Constructor is synchronized: " + Thread.currentThread().getName());
            // Simulate a delay
            try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
        }
    }
}


Dalam contoh ini, blok disegerakkan (ini) memastikan bahawa hanya satu utas boleh melaksanakan pembina pada satu masa.

1.4 Implikasi Pembina Penyegerakan

Menyegerakkan pembina boleh menghalang isu akses serentak, tetapi ia boleh menyebabkan kesesakan prestasi jika tidak digunakan dengan bijak. Adalah penting untuk memahami pertukaran yang terlibat, terutamanya dalam senario keselarasan tinggi.

2. Contoh Praktikal dan Keputusan Demo

2.1 Kod Contoh

Di bawah ialah contoh praktikal yang menunjukkan cara penyegerakan pembina berfungsi dengan berbilang urutan:


public class SynchronizedConstructorExample {
    public SynchronizedConstructorExample() {
        synchronized (this) {
            System.out.println("Constructor is synchronized: " + Thread.currentThread().getName());
            try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
        }
    }

    public static void main(String[] args) {
        Runnable task = () -> {
            new SynchronizedConstructorExample();
        };

        Thread t1 = new Thread(task, "Thread-1");
        Thread t2 = new Thread(task, "Thread-2");

        t1.start();
        t2.start();
    }
}


2.2 Keputusan Demo

Apabila menjalankan kod di atas, anda akan melihat bahawa pelaksanaan pembina disegerakkan antara kedua-dua utas. Hanya satu utas boleh melaksanakan pembina pada satu masa, seperti yang ditunjukkan oleh output:


Constructor is synchronized: Thread-1
Constructor is synchronized: Thread-2


Output menunjukkan bahawa setiap utas menunggu yang lain untuk menyelesaikan pelaksanaan pembina sebelum meneruskan.

3. Amalan dan Pertimbangan Terbaik

3.1 Bila hendak Menyegerakkan Pembina

Penyegerakan tidak selalu diperlukan. Ia disyorkan apabila:

  • Pembina menjalankan operasi pada sumber yang dikongsi.
  • Keselamatan benang adalah penting untuk fasa permulaan sesuatu objek.

3.2 Alternatif kepada Menyegerakkan Pembina

Daripada menyegerakkan pembina, pertimbangkan:

  • Menggunakan penyegerakan pada tahap kaedah jika bahagian kritikal tidak terhad kepada pembinaan.
  • Menggunakan kawalan serentak lain seperti java.util.concurrent utiliti.

4. Kesimpulan

Menyegerakkan pembina boleh menjadi cara yang berkesan untuk mengurus keselamatan benang semasa penciptaan objek, tetapi ia harus dilakukan dengan teliti. Pilihan untuk disegerakkan harus dipandu oleh keperluan khusus aplikasi anda dan sifat operasi yang dilakukan dalam pembina.

Jika anda mempunyai sebarang soalan atau memerlukan penjelasan lanjut tentang topik ini, sila tinggalkan komen di bawah!

Baca siaran lagi di : Bolehkah Pembina Disegerakkan dalam Java?

Atas ialah kandungan terperinci Bolehkah Pembina Disegerakkan di Java?. 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