Apa itu Wait and Notify in Java?

Tunggu dan Beri Tahu di Java adalah dua metode terakhir yang memungkinkan utas berkomunikasi satu sama lain. Artikel ini akan membantu Anda dengan detailnya

Fitur di Java memungkinkan eksekusi dua atau lebih bagian program secara bersamaan. Setiap bagian adalah Thread. Utas ini sering kali harus mengoordinasikan tindakan mereka. Ini dilakukan dengan menggunakan beberapa metode terakhir seperti Wait and Notify in Java. Artikel ini akan membantu Anda memahami metode ini secara mendetail.

Saya akan membahas topik dalam urutan berikut:





Mari kita mulai!

Apa itu Sinkronisasi Benang?

Program multi-utas mungkin secara teratur muncul dengan situasi di mana banyak mencoba untuk mendapatkan sumber daya yang sama yang menghasilkan hasil yang curang dan mengejutkan. Terkadang, lebih dari satu utas mungkin mencoba mengakses sumber daya bersama, Anda perlu memastikan bahwa sumber daya hanya akan digunakan oleh satu utas dalam satu waktu. Ini bisa dilakukan dengan menggunakan Sinkronisasi di Jawa.



Sekarang berbicara tentang Polling. Polling adalah proses menguji suatu kondisi secara berulang-ulang hingga benar. Metode ini diimplementasikan dengan bantuan untuk memeriksa apakah kondisi tertentu benar atau tidak. Anda dapat menggunakan metode ini untuk utas tetapi metode ini membuang banyak siklus CPU dan juga membuat proses implementasi menjadi sangat tidak efisien. Untuk menghindari bug semacam ini, metode seperti Wait dan Notify in Java diperkenalkan.

Apa itu metode Wait () dan Notify ()?

Untuk mengatasi masalah multithreading, metode seperti Wait dan Notify in digunakan. Kelas Object menggunakan tiga metode terakhir yang memungkinkan utas berkomunikasi tentang status terkunci dari sumber daya. Mereka juga disebut sebagai Blok Penjaga.

bagaimana belajar pl sql

Tunggu()

Metode ini menyebabkan utas menunggu hingga utas lain memanggil metode notify () dan notifyAll () untuk objek ini. Metode Wait () ini memberi tahu utas pemanggil untuk melepaskan kunci dan masuk ke mode tidur sampai beberapa utas lainnya memasuki monitor yang sama dan memanggil ke notify (). Metode ini melepaskan kunci sebelum menunggu dan mendapatkan kembali kunci tersebut sebelum kembali dari metode wait ().



Metode Wait () terintegrasi erat dengan kunci sinkronisasi. Ini dilakukan dengan menggunakan fitur yang tidak tersedia langsung dari mekanisme sinkronisasi.

Sintaksis:

tersinkronisasi (lockObject) {while (! condition) {lockObject.wait ()} // ambil tindakan di sini}

Utas saat ini harus memiliki monitor objeknya. Itu harus dipanggil hanya dari metode tersinkronisasi atau akan memunculkan pengecualian.

Memberitahu()

Metode ini digunakan untuk memberi tahu yang perlu berfungsi. Ini membangunkan satu utas yang disebut Tunggu() metode pada objek yang sama.

Perhatikan panggilan itu memberitahu() akhirnya tidak melepaskan kunci. Ini memberi tahu utas tunggu bahwa ia bisa bangun. Namun, kunci tersebut tidak benar-benar dilepaskan sampai blok sinkronisasi pemberi tahu selesai. Sekarang katakan, jika Anda menelepon memberitahu() pada sumber daya tetapi pemberi tahu masih perlu melakukan tindakan selama 10 detik dalam blok yang disinkronkan, utas yang telah menunggu harus menunggu setidaknya 10 detik lagi agar pemberi tahu melepaskan kunci pada objek, meskipun memberi tahu () telah dipanggil.

Sintaksis:

disinkronkan (lockObject) {// Establish_the_condition lockObject.notify () // kode tambahan apa pun jika diperlukan}

NotifyAll ()

Metode ini digunakan untuk membangunkan semua utas yang memanggil wait () pada objek yang sama. Utas dengan prioritas tertinggi pertama-tama akan berjalan di sebagian besar situasi meskipun tidak dijamin. Hal lainnya sama dengan metode notify ().

Mengapa dan bagaimana menggunakan Wait () dan Notify () di Java?

Anda harus menggunakan Wait and Notify in karena berhubungan dengan gembok dan benda memiliki gembok. Meskipun wait and notify di Java adalah konsep yang cukup mendasar, mereka didefinisikan di kelas objek . Anehnya, tidak mudah untuk menulis kode menggunakan tunggu dan beri tahu. Anda dapat menguji ini dengan menulis kode untuk memecahkan masalah produsen-konsumen menggunakan menunggu dan memberi tahu. Contoh konsumen produsen-Tunggu dan Beri Tahu di Java-EdurekaDi sini, saya telah berbagi Antre dandua utasdipanggil Produsen dan Konsumen . Produsen utas menempatkan nomor ke antrean bersama dan Konsumen utas mengkonsumsi angka dari ember bersama.

Syaratnya begitu suatu barang diproduksi, benang konsumen harus diberitahu dan demikian pula, setelah benang produsen konsumsi perlu diberitahu. Antar-utas inikomunikasidicapai dengan menggunakan wait and notify di Java.

Catatan : W.ait dan Nometode tify didefinisikan di kelas objek, dan mereka harus dipanggil di dalam blok tersinkronisasi.

Contoh

public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () disinkronkan (b) {coba {System.out.println ('Menunggu 2 untuk menyelesaikan ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} kelas Thread2 memperluas Thread1 {int total @Override public void run () {tersinkronisasi (ini) {untuk (int i = 0 i<=100 i++) { total += i } notify() }}}

Perhatikan bahwa dalam contoh di atas, objek Thread2, yaitu b, disinkronkan. Ini b menyelesaikan kalkulasi sebelum utas utama mengeluarkan nilai totalnya.

Keluaran:

Ini membawa kita ke akhir artikel ini di mana kita telah mempelajari pada bagian Wait and Notify in Java.Saya harap konten yang disebutkan di atas terbukti bermanfaat dalam meningkatkan Anda pengetahuan. Teruslah membaca, terus menjelajah!

Lihat juga oleh Edureka, perusahaan pembelajaran online tepercaya dengan jaringan lebih dari 250.000 pelajar yang puas dan tersebar di seluruh dunia. Kursus pelatihan dan sertifikasi Java J2EE dan SOA Edureka dirancang untuk siswa dan profesional yang ingin menjadi Pengembang Java. Kursus ini dirancang untuk memberi Anda awal yang baik dalam pemrograman Java dan melatih Anda untuk konsep Java inti dan lanjutan bersama dengan berbagai seperti Hibernate & Spring.