Penyegerakan benang dan mekanisme pengecualian bersama dalam Java
Di Java, pelbagai benang ialah teknologi penting. Untuk melaksanakan pelbagai tugas secara serentak dengan cekap, anda perlu menguasai mekanisme penyegerakan dan kerjasama antara utas. Artikel ini akan memperkenalkan penyegerakan benang dan mekanisme pengecualian bersama dalam Java.
Penyegerakan benang merujuk kepada kerjasama berbilang rangkaian untuk menyelesaikan tugasan yang ditentukan semasa pelaksanaan. Segmen kod yang dilaksanakan oleh berbilang utas mengakses sumber yang dikongsi bersama Selepas satu segmen kod dilaksanakan, hanya satu utas boleh mengakses sumber yang dikongsi dan utas lain perlu menunggu. Penyegerakan benang mengikut prinsip asas berikut:
(1) Atomicity: sekeping kod tertentu hanya boleh diakses oleh satu thread pada masa yang sama.
(2) Kemasukan Semula: Apabila benang melaksanakan blok disegerakkan beberapa kali, ia tidak akan dikunci kerana ia sudah memegang kunci.
Di Java, terdapat dua cara untuk mengekalkan penyegerakan iaitu disegerakkan dan Kunci.
1.1 disegerakkan
disegerakkan ialah mekanisme penyegerakan paling asas dalam Java. Format blok penyegerakan disegerakkan adalah seperti berikut:
disegerakkan (objek) {
//Segmen kod
}
Antaranya, objek itu adalah sumber yang dikongsi yang perlu disegerakkan, seperti kaedah objek atau objek itu sendiri. Hanya satu utas boleh mengakses blok kod yang diubah suai oleh kata kunci yang disegerakkan pada masa yang sama. Contohnya:
kaedah void disegerakkan awam(){
//代码
}
Dalam contoh kod di atas, kaedah kaedah() diubah suai dengan kata kunci yang disegerakkan, dan di sana hanya satu Benang boleh melaksanakan kaedah ini secara serentak. Dalam pelbagai benang, ia boleh dijamin bahawa benang yang mengakses kaedah ini disegerakkan.
1.2 Kunci
Mekanisme kunci menyediakan kawalan penguncian yang lebih halus. Lock ialah antara muka dalam Java, dilaksanakan melalui ReentrantLock, subkelas antara muka Lock Penggunaan kunci Lock agak serupa dengan kata kunci yang disegerakkan, tetapi ia lebih fleksibel dalam penggunaan. Apabila menggunakan mekanisme Kunci, segmen kod yang perlu memperoleh dan melepaskan kunci disertakan dalam cubaan dan akhirnya blok kod. Contohnya:
Kunci kunci = new ReentrantLock();
lock.lock();
cuba {
//代码段
} akhirnya {
lock.unlock();
}
Dalam kod di atas, kaedah lock() digunakan untuk mengunci sumber kongsi dan kaedah buka kunci() digunakan untuk melepaskan kunci. Oleh kerana mekanisme Kunci mempunyai kawalan penguncian yang lebih halus, ia lebih sesuai dalam situasi berprestasi tinggi tertentu.
Mekanisme pengecualian bersama merujuk kepada memastikan bahawa hanya satu urutan boleh mengakses sumber dikongsi pada masa yang sama semasa pelaksanaan berbilang utas. Di Jawa, terdapat dua cara untuk melaksanakan mekanisme pengecualian bersama, iaitu disegerakkan dan Kunci.
2.1 disegerakkan
Blok disegerakkan yang disegerakkan bukan sahaja boleh mencapai penyegerakan benang, tetapi juga melaksanakan mekanisme pengecualian bersama. Contoh kod penggunaan disegerakkan untuk melaksanakan mekanisme pengecualian bersama adalah seperti berikut:
kaedah batal disegerakkan awam(){
//代码段
}
Dalam kod di atas, penyegerakan disegerakkan ditambahkan sebelum kata kunci kaedah, ini memastikan bahawa hanya satu utas boleh mengakses kod ini pada masa yang sama, dengan itu melaksanakan mekanisme pengecualian bersama.
2.2 Kunci
Menggunakan mekanisme pengecualian bersama yang disediakan dalam perpustakaan LockAPI, mekanisme pengecualian bersama juga boleh dilaksanakan. Contoh kod menggunakan mekanisme Kunci untuk melaksanakan mekanisme pengecualian bersama adalah seperti berikut:
kunci Kunci akhir peribadi = new ReentrantLock();
kaedah kekosongan awam() {
lock.lock(); try { //代码段 } finally { lock.unlock(); }
}
Dalam kod di atas, kaedah lock() digunakan untuk mengunci sumber yang dikongsi, dan kaedah buka kunci() digunakan untuk melepaskan kunci, dengan itu merealisasikan mekanisme pengecualian bersama.
Kedua-dua blok penyegerakan yang disegerakkan dan mekanisme Kunci boleh melaksanakan penyegerakan benang dan mekanisme pengecualian bersama, tetapi terdapat beberapa perbezaan antara kedua-duanya.
(1) Butiran yang berbeza: blok penyegerakan yang disegerakkan mempunyai butiran yang lebih besar, manakala mekanisme Kunci menyediakan butiran yang lebih kecil melalui antara muka Kunci Anda boleh menggunakan mekanisme Kunci untuk menentukan kunci yang lebih diperibadikan dan juga mengawal kunci lepaskan.
(2) Keterlihatan berbeza: Apabila menggunakan blok penyegerakan disegerakkan, apabila satu utas memiliki kunci, utas lain tidak dapat melihat kunci, jadi ia tidak dapat mengawal pelepasan kunci secara bebas. Menggunakan mekanisme Kunci, apabila benang memperoleh kunci, kunci itu kelihatan kepada semua benang dan boleh mengawal pelepasan kunci.
Ringkasnya, penyegerakan benang dan mekanisme pengecualian bersama dalam Java adalah mekanisme yang sangat penting dalam pengaturcaraan berbilang benang. Senario aplikasi yang berbeza memerlukan penggunaan mekanisme penyegerakan dan pengecualian bersama yang berbeza Memilih mekanisme yang sesuai boleh meningkatkan kecekapan pelaksanaan aplikasi berbilang benang.
Atas ialah kandungan terperinci Penyegerakan benang dan mekanisme pengecualian bersama di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!