Rumah  >  Artikel  >  Java  >  Kelas Manakah Kaedah wait(), notify(), dan notifyAll() Milik?

Kelas Manakah Kaedah wait(), notify(), dan notifyAll() Milik?

Barbara Streisand
Barbara Streisandasal
2024-10-06 11:27:30432semak imbas

Which Class Do the wait(), notify(), and notifyAll() Methods Belong To?

1. Memahami Kaedah wait(), notify(), dan notifyAll().

Kaedah wait(), notify() dan notifyAll() adalah penting kepada model konkurensi Java. Mereka tergolong dalam kelas Objek, yang merupakan punca hierarki kelas di Jawa. Ini bermakna setiap kelas dalam Java mewarisi kaedah ini daripada kelas Objek.

1.1 Kelas Objek

Kelas Objek ialah kelas super bagi semua kelas di Jawa. Ia menyediakan satu set kaedah asas yang diwarisi oleh setiap kelas, termasuk toString(), equals() dan hashCode(). Kaedah wait(), notify() dan notifyAll() juga merupakan sebahagian daripada kelas ini, membolehkan urutan berkomunikasi dan menyelaraskan aktiviti mereka.

1.2 Peranan tunggu(), notify(), dan notifyAll()

  • wait(): Kaedah ini menyebabkan urutan semasa menunggu sehingga urutan lain memanggil notify() atau notifyAll() pada objek yang sama. Ia mesti dipanggil dari dalam blok atau kaedah yang disegerakkan.
  • notify(): Kaedah ini membangunkan satu utas yang sedang menunggu pada monitor objek (kunci benang). Jika berbilang benang sedang menunggu, salah satu daripadanya dipilih sewenang-wenangnya.
  • notifyAll(): Kaedah ini membangunkan semua urutan yang sedang menunggu pada monitor objek. Ini berguna apabila berbilang urutan perlu dimaklumkan tentang perubahan keadaan.

2. Menggunakan wait(), notify(), dan notifyAll() dalam Amalan

Untuk memahami cara kaedah ini berfungsi, mari lihat beberapa contoh praktikal.

2.1 Kod Contoh

Berikut ialah contoh mudah yang menunjukkan penggunaan kaedah ini:


class SharedResource {
    private boolean available = false;

    public synchronized void consume() throws InterruptedException {
        while (!available) {
            wait(); // Wait until the resource is available
        }
        // Consume the resource
        System.out.println("Resource consumed.");
        available = false;
        notify(); // Notify that the resource is now unavailable
    }

    public synchronized void produce() {
        // Produce the resource
        available = true;
        System.out.println("Resource produced.");
        notify(); // Notify that the resource is available
    }
}

public class Main {
    public static void main(String[] args) {
        SharedResource resource = new SharedResource();

        Thread producer = new Thread(() -> {
            try {
                while (true) {
                    Thread.sleep(1000); // Simulate time to produce
                    resource.produce();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        Thread consumer = new Thread(() -> {
            try {
                while (true) {
                    resource.consume();
                    Thread.sleep(2000); // Simulate time to consume
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        producer.start();
        consumer.start();
    }
}


2.2 Keputusan Demo

Dalam contoh di atas:

  • Benang pengeluar akan menghasilkan sumber secara berkala dan memberitahu pengguna.
  • Urut pengguna akan menunggu sehingga sumber tersedia, menggunakannya dan kemudian memberitahu pengeluar jika perlu.

Anda akan melihat output berikut yang menunjukkan operasi pengeluar dan pengguna:


Resource produced.
Resource consumed.
...


Output ini menunjukkan cara wait(), notify() dan notifyAll() menyelaraskan interaksi pengeluar-pengguna.

3. Kesimpulan

Dengan memahami kelas mana kaedah wait(), notify() dan notifyAll() tergolong dan cara ia berfungsi, anda boleh mengurus dengan berkesan komunikasi antara benang dalam aplikasi Java anda. Kaedah ini penting untuk memastikan rangkaian bekerjasama dan berkongsi sumber dengan cekap.

Jika anda mempunyai sebarang pertanyaan atau memerlukan penjelasan lanjut, sila tinggalkan komen di bawah!

Baca siaran lebih lanjut di : Kelas Manakah Kaedah Tunggu(), notify(), dan notifyAll() Milik?

Atas ialah kandungan terperinci Kelas Manakah Kaedah wait(), notify(), dan notifyAll() Milik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:jUnit - Ujian unit dalam JavaArtikel seterusnya:tiada