Saat membaca artikel tentang utas Java, saya sering melihat ungkapan: "utas saat ini adalah pemilik monitor objek ini". Saya mengerti artinya: utas mendapat hak untuk beroperasi pada objek. Tapi saya bingung mengapa kita menggunakan frase "monitor objek" daripada "kunci objek"?
Singkatnya, saya tidak tahu arti kata 'monitor'. Pertanyaannya mungkin aneh dan sederhana. Tapi saya berharap ada yang bisa membantu menyelesaikannya. 3k
java
multithreading
monitor
jiafu
sumber
sumber
Jawaban:
Lihat jawaban ulmangt untuk link yang menjelaskan istilah "monitor" seperti yang digunakan dalam konteks ini. Perhatikan bahwa:
(Sumber: Wikipedia )
Mengapa menggunakan istilah "monitor" daripada "kunci"? Sebenarnya, istilah tersebut memiliki arti yang berbeda ... terutama jika Anda menggunakannya dengan cara yang semula dimaksudkan untuk digunakan.
Sebuah "kunci" adalah sesuatu dengan primitif perolehan dan rilis yang mempertahankan properti kunci tertentu; misalnya penggunaan eksklusif atau penulis tunggal / banyak pembaca.
Sebuah "monitor" adalah mekanisme yang memastikan bahwa hanya satu thread yang dapat mengeksekusi bagian (atau bagian) kode tertentu pada waktu tertentu. Ini dapat diimplementasikan menggunakan kunci (dan "variabel kondisi" yang memungkinkan utas menunggu atau mengirim pemberitahuan ke utas lain bahwa kondisi terpenuhi), tetapi ini lebih dari sekadar kunci. Memang, dalam kasus Java, kunci sebenarnya yang digunakan oleh monitor tidak dapat diakses secara langsung. (Anda tidak bisa mengatakan "Object.lock ()" untuk mencegah thread lain memperolehnya ... seperti yang Anda bisa dengan
Lock
instance Java .)Singkatnya, jika seseorang harus bertele-tele, "monitor" sebenarnya adalah istilah yang lebih baik daripada "kunci" untuk menggambarkan apa yang disediakan oleh Java. Namun dalam praktiknya, kedua istilah tersebut digunakan hampir secara bergantian.
sumber
Monitor hanyalah istilah untuk objek yang metodenya dapat digunakan dengan aman dalam lingkungan multithread.
Ada artikel Wikipedia yang bagus tentang Monitor:
http://en.wikipedia.org/wiki/Monitor_(synchronization)
Jika Anda menggulir ke bawah, bahkan ada bagian yang secara eksplisit tentang Java .
sumber
Kutipan dari Inside the Java Virtual Machine
Pantau
Mengunci
sumber
Sebuah
synchronized
blok di sekitarobject
monitornya, yang mengontrol kunci pada objek. Berikut contohnyasynchronized (object) { while (<condition does not hold>) object.wait(timeout); ... // Perform action appropriate to condition }
sumber
Meskipun terlambat untuk menjawab pertanyaan ini, saya pikir untuk menambahkan seandainya itu berguna.
Berikut adalah blok kode Java yang disinkronkan di dalam metode Java yang tidak tersinkronisasi
public void add(int value){ synchronized(this){ this.count += value; } }
Dalam contoh "ini" digunakan, yang merupakan contoh tempat metode add dipanggil. Metode instance tersinkronisasi menggunakan objek yang dimilikinya sebagai objek monitor.
=> Hanya satu utas yang dapat mengeksekusi di dalam blok kode Java yang disinkronkan pada objek monitor yang sama.
sumber
Mesin Virtual Java menggunakan monitor untuk mendukung multithreading. Monitor mencapai hal ini melalui dua konsep - Saling pengecualian saat menjalankan utas (di sinilah 'penguncian' muncul) dan koordinasi sebagai sarana komunikasi antar utas (di sinilah metode tunggu dan beri tahu objek muncul).
Membaca bagian berikut dari "Inside JVM" akan menghilangkan keraguan ini, apakah dijelaskan dengan sangat baik di sini (Bab 20, Sinkronisasi thread) -
https://www.artima.com/insidejvm/ed2/threadsynchP.html
sumber