Apa itu Tunggu dan Beritahu di Java?



Tunggu dan Beritahu di Java adalah dua kaedah terakhir yang membolehkan utas berkomunikasi antara satu sama lain. Artikel ini akan membantu anda dengan terperinci

ciri di Java membolehkan pelaksanaan serentak dua atau lebih bahagian program. Setiap bahagian adalah Benang. Benang ini sering harus menyelaraskan tindakan mereka. Ini dilakukan dengan menggunakan beberapa kaedah terakhir seperti Tunggu dan Beritahu di Java. Artikel ini akan membantu anda memahami kaedah ini secara terperinci.

Saya akan membincangkan topik dalam urutan berikut:





Mari kita mulakan!

Apa itu Penyegerakan Thread?

Program berbilang ulir secara berkala mungkin mempunyai situasi di mana banyak berusaha untuk mendapatkan sumber yang sama yang menghasilkan hasil penipuan dan mengejutkan. Kadang-kadang, lebih daripada satu utas mungkin cuba mengakses sumber yang dikongsi, anda perlu memastikan bahawa sumber itu akan digunakan oleh hanya satu utas pada satu masa. Ini boleh dilakukan dengan menggunakan Penyegerakan di Java.



Sekarang bercakap mengenai Polling. Pengundian adalah proses menguji keadaan berulang kali sehingga benar. Kaedah ini dilaksanakan dengan bantuan untuk memeriksa sama ada keadaan tertentu itu benar atau tidak. Anda boleh menggunakan kaedah ini untuk utas tetapi kaedah ini membuang banyak kitaran CPU dan juga menjadikan proses pelaksanaan sangat tidak berkesan. Untuk mengelakkan bug seperti ini, kaedah seperti Tunggu dan Beritahu di Java diperkenalkan.

Apakah kaedah Wait () dan Notify ()?

Untuk mengatasi masalah multithreading, kaedah seperti Tunggu dan Beritahu di digunakan. Kelas Objek menggunakan tiga kaedah terakhir ini yang membolehkan utas berkomunikasi mengenai status sumber yang terkunci. Mereka juga disebut sebagai Blok Terpelihara.

penyemak imbas db untuk semakan sqlite

Tunggu ()

Kaedah ini menyebabkan utas menunggu sehingga utas lain memanggil kaedah notify () dan notifyAll () untuk objek ini. Kaedah Tunggu () ini memberitahu utas panggilan untuk melepaskan kunci dan tidur sehingga beberapa utas lain memasuki monitor yang sama dan panggilan untuk memberitahu (). Kaedah ini melepaskan kunci sebelum menunggu dan mengambil kunci sebelum kembali dari kaedah tunggu ().



Kaedah Tunggu () digabungkan dengan kunci penyegerakan. Ini dilakukan dengan menggunakan ciri yang tidak tersedia secara langsung dari mekanisme penyegerakan.

Sintaks:

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

Benang semasa mesti memiliki monitor objeknya. Ia mesti dipanggil dari kaedah penyegerakan sahaja atau tidak, ia akan memberikan pengecualian.

Maklumkan ()

Kaedah ini digunakan untuk memberitahu bahawa ia perlu berfungsi. Ia membangunkan satu utas yang disebut tunggu () kaedah pada objek yang sama.

Perhatikan bahawa panggilan maklumkan () akhirnya tidak melepaskan kunci. Ia memberitahu benang menunggu bahawa ia dapat bangun. Walau bagaimanapun, kunci sebenarnya tidak diserahkan sehingga blok penyegerakan pemberitahuan selesai. Sekarang katakan, jika anda memanggil maklumkan () pada sumber tetapi pemberi maklumat masih perlu melakukan tindakan selama 10 saat dalam bloknya yang disegerakkan, utas yang telah menunggu harus menunggu sekurang-kurangnya 10 saat lagi untuk pemberitahuan melepaskan kunci pada objek, walaupun memberitahu () telah dipanggil.

Sintaks:

disegerakkan (lockObject) {// create_the_condition lockObject.notify () // sebarang kod tambahan jika diperlukan}

MaklumkanSemua ()

Kaedah ini digunakan untuk membangunkan semua utas yang disebut tunggu () pada objek yang sama. Benang dengan keutamaan tertinggi akan dijalankan pada kebanyakan keadaan walaupun tidak dijamin. Perkara lain sama seperti kaedah notify ().

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

Anda harus menggunakan Tunggu dan Beritahu di kerana ia berkaitan dengan kunci dan objek mempunyai kunci. Walaupun menunggu dan memberi tahu di Jawa merupakan konsep yang sangat mendasar, konsep tersebut ditentukan dalam kelas objek . Anehnya, tidak semudah itu menulis kod menggunakan tunggu dan maklumkan. Anda boleh mengujinya dengan menulis kod untuk menyelesaikan masalah pengeluar-pengguna dengan menggunakan tunggu dan maklumkan. Contoh pengguna pengeluar-Tunggu dan Beritahu di Java-EdurekaDi sini, saya ada berkongsi Beratur dandua utasdipanggil Penerbit dan Pengguna . Penerbit utas memasukkan nombor ke dalam barisan bersama dan Pengguna utas menggunakan nombor dari baldi yang dikongsi.

Syaratnya ialah apabila barang dihasilkan, utas pengguna harus diberitahu dan juga, setelah benang pengeluar penggunaan perlu diberitahu. Ini antara benangkomunikasidicapai dengan menggunakan tunggu dan beritahu di Java.

Catatan : W.ait dan No.kaedah tify ditentukan dalam kelas objek, dan mereka mesti dipanggil di dalam blok yang disegerakkan.

Contohnya

kelas awam Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Menunggu 2 selesai ...' ) b.wait ()} tangkapan (InterruptException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} kelas Thread2 meluaskan Thread1 {int total @Override public void run () {disegerakkan (ini) {untuk (int i = 0 i<=100 i++) { total += i } notify() }}}

Perhatikan bahawa dalam contoh di atas, objek Thread2, iaitu b, diselaraskan. Ini b menyelesaikan pengiraan sebelum utas Utama mengeluarkan nilai keseluruhannya.

Pengeluaran:

Ini membawa kita ke akhir artikel ini di mana kita telah mempelajari pada Tunggu dan Beritahu di Jawa.Saya harap kandungan yang disebutkan di atas terbukti dapat membantu meningkatkan kandungan anda pengetahuan. Teruskan membaca, terus meneroka!

Lihat juga oleh Edureka, sebuah syarikat pembelajaran dalam talian yang dipercayai dengan rangkaian lebih daripada 250,000 pelajar berpuas hati yang tersebar di seluruh dunia. Kursus latihan dan pensijilan Java J2EE dan SOA Edureka dirancang untuk pelajar dan profesional yang ingin menjadi Pembangun Java. Kursus ini dirancang untuk memberi Anda awal dalam pengaturcaraan Java dan melatih anda untuk konsep Java teras dan maju bersama dengan pelbagai seperti Hibernate & Spring.