Apa itu monitor di Jawa?

130

Apa yang dimaksud dengan monitor dalam pemrograman bersamaan di Jawa?

Ketika saya membaca bahwa "setiap objek telah menghubungkan monitor" apa artinya?

Apakah ini objek khusus?

xdevel2000
sumber
11
+1 Ini membuat saya membaca bagaimana monitor diterapkan pada level JVM. Belajar sesuatu yang baru
naikus
@naikus Saya berharap berbagi rincian dari Anda :)
roottraveller

Jawaban:

90

Monitor adalah mekanisme untuk mengontrol akses bersamaan ke suatu objek.

Ini memungkinkan Anda untuk melakukan:

Utas 1:

public void a()
{
    synchronized(someObject) {
        // do something (1)
    }
}

Utas 2:

public void b()
{
    synchronized(someObject) {
        // do something else (2)
    }
}

Ini mencegah Thread 1 dan 2 mengakses bagian yang dipantau (disinkronkan) secara bersamaan. Satu akan mulai, dan monitor akan mencegah yang lain mengakses wilayah sebelum yang pertama selesai.

Itu bukan objek khusus. Itu mekanisme sinkronisasi ditempatkan di akar hirarki kelas: java.lang.Object.

Ada juga waitdan notifymetode yang juga akan menggunakan monitor objek untuk berkomunikasi di antara berbagai utas.

Pablo Santa Cruz
sumber
1
jadi bisakah kita mengatakan bahwa ketika kita membuat metode yang disinkronkan kita mendefinisikan kunci (monitor) pada metode objek itu?
xdevel2000
28
Mm, tidak persis. Setiap objek secara otomatis memiliki monitor (mutex) yang terkait dengannya, apa pun yang terjadi. Ketika Anda mendeklarasikan metode yang disinkronkan, Anda menyatakan bahwa runtime harus mendapatkan kunci pada monitor objek sebelum eksekusi metode itu dimulai (dan harus melepaskan kunci sebelum kontrol kembali ke kode panggilan).
Andrzej Doyle
31
Dan @Pablo - tidak ada yang namanya monitor untuk suatu metode; monitor hanya ada untuk objek, yang akan menjadi contoh terlampir untuk sebagian besar metode, atau Classobjek yang sesuai untuk metode statis. Jika Anda sudah memiliki metode1 disinkronkan () dan Anda menyatakan metode2 () disinkronkan, tidak ada monitor baru dibuat dan bahkan memanggil metode baik (pada objek yang sama) akan mencoba untuk mengunci monitor yang sama. Ini sering menangkap pendatang baru.
Andrzej Doyle
1
@Andrzej: jadi, setiap objek memiliki SATU monitor yang terkait dengannya. Maka saya dapat memiliki banyak metode yang disinkronkan. Setelah setiap kali metode itu panggilan thread itu mendapatkan monitor yang melakukan hal-hal sinkronisasi.
xdevel2000
1
hanya perlu menjelaskan ini ... objek yang digunakan untuk memanggil blok yang disinkronkan di utas 1 dapat digunakan lagi di utas lainnya (utas 2) untuk memanggil metode normal (tidak disinkronkan) pada saat yang sama?
27

Monitor adalah entitas yang memiliki set kunci dan set tunggu . Di Jawa, apa pun Objectbisa berfungsi sebagai monitor.

Untuk penjelasan terperinci tentang cara kerja monitor di Jawa, saya sarankan membaca bagian Mekanika Monitor dari Pemrograman Bersamaan di Jawa (tautan sebelumnya menampilkan pratinjau di buku-buku Google, dan bagian itu tersedia untuk dibaca).

JRL
sumber
Seperti yang Anda katakan "Monitor adalah entitas ..", apakah ini berarti monitor adalah objek / keadaan internal yang memiliki / melacak kunci dan waitset? Jika tidak, bisakah Anda menjelaskan Entitas di sini? Pada dasarnya ketika kita java doc mengatakan Wakes up all threads that are waiting on this object's monitor. tentang notifyall (), apa yang saya dapatkan adalah objek yang mempertahankan (dengan bantuan entitas / objek internal) apa semua utas menunggu kunci, bahwa entitas / objek internal disebut monitor?
user3198603
Jawaban yang paling berguna. Terima kasih @JRL.
gravetii
Bagi saya dikatakan: "Pratinjau tidak tersedia untuk halaman ini."
opncow
9
  1. Monitor adalah konsep / mekanisme yang tidak terbatas pada Bahasa Jawa;
  2. "Dalam pemrograman bersamaan, monitor adalah objek atau modul yang dimaksudkan untuk digunakan secara aman oleh lebih dari satu utas";
  3. Seperti yang diketahui setiap pembaca, setiap objek di Jawa adalah sub-kelas dari java.lang.Object. Orang-orang java membuat java.lang.Object sedemikian rupa sehingga memiliki fitur dan karakteristik yang memungkinkan programmer Java untuk menggunakan objek apa pun sebagai monitor. Misalnya, setiap objek memiliki antrean tunggu, antrean masuk kembali, lalu tunggu dan beri tahu metode membuatnya menjadi monitor;
  4. baca tentang monitor di sini .
mgibson
sumber
4

Bahasa Jawa dan sistem runtime mendukung sinkronisasi utas melalui penggunaan monitor.
Monitor dikaitkan dengan item data tertentu (variabel kondisi) dan berfungsi sebagai kunci pada data tersebut. Ketika utas memegang monitor untuk beberapa item data, utas lainnya dikunci dan tidak dapat memeriksa atau memodifikasi data.


sumber
2

Monitor adalah konstruk sinkronisasi yang memungkinkan utas untuk memiliki pengecualian bersama dan kemampuan untuk menunggu (memblokir) agar kondisi tertentu menjadi kenyataan.

Monitor juga memiliki mekanisme untuk memberi tanda utas lain yang kondisinya telah terpenuhi. Ini adalah entitas yang memiliki set kunci dan set menunggu. Di Jawa, Obyek apa pun dapat berfungsi sebagai monitor.

Di mesin virtual Java, setiap objek dan kelas secara logis dikaitkan dengan monitor. Untuk mengimplementasikan kemampuan pengecualian bersama dari monitor, kunci (terkadang disebut mutex) dikaitkan dengan setiap objek dan kelas. Ini disebut semaphore dalam istilah sistem operasi, mutex adalah semaphore biner.

Untuk informasi lebih lanjut, periksa tautannya

Swati Gour
sumber