Rumah > Java > javaTutorial > teks badan

Penyegerakan benang dan mekanisme pengecualian bersama di Jawa

PHPz
Lepaskan: 2023-06-16 10:09:10
asal
1674 orang telah melayarinya

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.

  1. Penyegerakan benang

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(){

//代码
Salin selepas log masuk

}

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 {

//代码段
Salin selepas log masuk

} akhirnya {

lock.unlock();
Salin selepas log masuk

}

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.

  1. Mekanisme pengecualian bersama

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(){

//代码段
Salin selepas log masuk

}

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();
}
Salin selepas log masuk

}

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.

  1. Perbandingan penyegerakan benang dan 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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan