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.
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.
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.
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.
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(); } }
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.
Penyegerakan tidak selalu diperlukan. Ia disyorkan apabila:
Daripada menyegerakkan pembina, pertimbangkan:
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!