Kunci adalah alat untuk mengendalikan beberapa utas untuk mengakses sumber daya bersama. Secara umum, kunci memberikan kunjungan eksklusif ke sumber daya bersama. Hanya ada satu utas untuk mendapatkan kunci pada suatu waktu. Namun, beberapa kunci dapat memungkinkan wawancara dengan sumber daya bersama, seperti ReadWritelock (memelihara sepasang kunci terkait, satu untuk operasi baca -yang, dan yang lainnya untuk operasi penulisan).
1. Lock menyediakan operasi akuisisi kunci tanpa syarat, bundar, waktu, interruptable, semua metode penguncian dan pembukaan kunci bersifat eksplisit.
Kunci antarmuka publik {void lock (); Mode Boolean Trylock (Timeout Long, TimeUnit) melempar InterruptedException;
2. Reentrantlock mewujudkan antarmuka kunci.
3. Bentuk normatif dari antarmuka kunci membutuhkan kunci pelepasan.unlock () untuk melepaskan lock.unlock () di blok akhirnya. Jika kode guard kunci tidak normal di luar try block, itu tidak akan pernah dirilis.
Penggunaan kunci simulasi berikut: dengan asumsi bahwa ada dua utas (utas A, B Thread) untuk memanggil metode cetak (nama string), Thread A bertanggung jawab untuk mencetak string 'Zhangsan', dan Thread B bertanggung jawab untuk mencetak 'Lisi ' rangkaian.
1. Saat menambahkan metode serat (nama string), utas A belum dieksekusi, dan utas B telah mulai dieksekusi, maka nama yang dicetak akan memiliki masalah berikut.
2. Ketika metode nama cetak ditambahkan ke kunci, metode cetak (nama string) dieksekusi setelah A selesai setelah eksekusi selesai untuk mencapai efek pengecualian atau sinkronisasi timbal balik.
paket com.ljq.test.thread; String [] args) {new LockTest (). ) {Coba {thread.sleep (10);} catch (InterruptedException e) {e.printstacktrace ();} haangsan ");}}}). Start (); // b Thread Thread baru (runnable baru () { @Override public void run () {while (true) {coba {thread.sleep (10);} catch (interruptedException e) {e.prin. Start ();} outputer kelas statis {lock lock = baru reentrantlock (); ;