Rumah >Java >javaTutorial >Bagaimana untuk mencapai keselamatan benang dalam blok disegerakkan fungsi Java?
Blok disegerakkan fungsi Java mencapai keselamatan benang dengan memperoleh kunci penyegerakan Apabila benang memasuki blok disegerakkan, utas lain tidak boleh masuk, memastikan akses kepada data yang dikongsi selamat untuk benang. Langkah khusus: Isytihar kaedah disegerakkan atau blok kod dan gunakan kata kunci disegerakkan. Apabila benang memasuki blok disegerakkan, ia memperoleh kunci penyegerakan. Urutan lain tidak boleh mengakses data dalam blok disegerakkan sehingga utas pertama melepaskan kunci penyegerakan. Blok yang disegerakkan mengandungi hanya kod yang perlu disegerakkan.
Bagaimana untuk mencapai keselamatan benang dalam blok disegerakkan fungsi Java?
Blok disegerakkan ialah gula sintaktik yang digunakan untuk menjadikan fungsi tidak selamat untuk benang dalam persekitaran berbilang benang. Ia pada asasnya adalah kunci mutex, apabila benang memasuki blok disegerakkan, ia memperoleh kunci disegerakkan dan tiada benang lain boleh memasuki blok disegerakkan sehingga benang itu melepaskan kunci. . Jika berbilang benang memanggil fungsi ini pada masa yang sama, nilai pembilang mungkin tidak betul. Kita boleh menggunakan blok disegerakkan untuk menyelesaikan masalah ini:
public synchronized void myFunc() { // 临界区代码 }
Dengan cara ini, apabila urutan memanggil fungsi increment()
, ia akan memperoleh kunci eksklusif pada counter
. Tiada urutan lain boleh mengakses counter
sehingga urutan pertama melepaskan kunci, memastikan akses kepada counter
selamat untuk thread.
Anda hanya boleh menggunakan kata kunci
Blok disegerakkan hanya sah dalam blok kod Sebaik sahaja benang meninggalkan blok disegerakkan, benang lain boleh masuk. increment()
,它将一个计数器值加 1。如果多个线程同时调用此函数,则计数器值可能会发生错误。我们可以使用同步块来解决这个问题:
private int counter; public synchronized void increment() { counter++; }
这样,当一个线程调用 increment()
函数时,它会获取对 counter
的独占锁。其他线程在第一个线程释放该锁之前都无法访问 counter
,从而确保对 counter
的访问是线程安全的。
需要注意的是:
synchronized
Atas ialah kandungan terperinci Bagaimana untuk mencapai keselamatan benang dalam blok disegerakkan fungsi Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!