Rumah  >  Artikel  >  Java  >  Analisis mendalam kaedah objek dalam Java: tunggu dan maklumkan

Analisis mendalam kaedah objek dalam Java: tunggu dan maklumkan

PHPz
PHPzasal
2023-12-20 12:47:38469semak imbas

Analisis mendalam kaedah objek dalam Java: tunggu dan maklumkan

Kaedah objek dalam Java: penjelasan terperinci tentang tunggu dan maklumkan

Di Jawa, kaedah objek tunggu dan beritahu ialah alat penting untuk kerjasama dan komunikasi antara rangkaian. Mereka membantu utas menunggu atau membangunkan pelaksanaan utas lain pada masa yang sesuai. Artikel ini akan memperkenalkan penggunaan kaedah tunggu dan pemberitahuan secara terperinci dan memberikan contoh kod khusus.

1. Penggunaan kaedah tunggu

Kaedah tunggu digunakan untuk meletakkan utas semasa ke dalam keadaan menunggu sehingga utas lain memanggil kaedah pemberitahuan pada objek yang sama, atau kaedah notifyAll membangunkannya. Kaedah tunggu mempunyai bentuk berikut:

  1. void wait(): Membuatkan thread semasa menunggu sehingga thread lain bangun.
  2. menunggu batal(masa tamat lama): Menjadikan utas semasa menunggu untuk bilangan milisaat yang ditentukan, atau sehingga utas lain terjaga.
  3. void wait(long timeout, int nanos): Menyebabkan utas semasa menunggu bilangan milisaat yang ditentukan ditambah bilangan nanosaat yang ditentukan, atau sehingga utas lain terjaga.

Apabila menggunakan kaedah tunggu, ia mesti dimasukkan ke dalam blok kod yang disegerakkan untuk memastikan penguncian objek. Berikut ialah contoh klasik:

public class WaitNotifyExample {
    private boolean flag = false;
    
    public synchronized void waitForFlag() {
        try {
            while (!flag) {
                wait(); // 当前线程等待
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 执行其他操作
    }
    
    public synchronized void setFlag() {
        flag = true;
        notify(); // 唤醒正在等待的线程
    }
}

Dalam contoh di atas, selepas memanggil kaedah waitForFlag, utas akan memasuki keadaan menunggu sehingga utas lain memanggil kaedah setFlag untuk membangunkannya.

2. Penggunaan kaedah notify

Kaedah notify digunakan untuk membangunkan benang yang menunggu. Ia akan memilih utas secara rawak untuk bangun Jika terdapat berbilang utas menunggu, hanya satu daripadanya boleh dibangunkan. Kaedah pemberitahuan digunakan dalam bentuk berikut:

public class NotifyExample {
    public synchronized void waitForNotify() {
        try {
            wait(); // 当前线程等待
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 执行其他操作
    }
    
    public synchronized void notifyThread() {
        notify(); // 唤醒一个等待的线程
    }
}

Dalam contoh di atas, utas yang memanggil kaedah waitForNotify akan memasuki keadaan menunggu sehingga utas lain memanggil kaedah notifyThread untuk membangunkannya.

3. Gunakan tunggu dan maklumkan untuk mencapai kerjasama antara benang

Kaedah tunggu dan maklumkan sering digunakan dalam senario kerjasama berbilang benang seperti model pengeluar-pengguna. Berikut ialah contoh pengeluar-pengguna yang mudah:

public class ProducerConsumerExample {
    private LinkedList<Integer> buffer = new LinkedList<>();
    private final int MAX_SIZE = 10;
    
    public synchronized void produce() {
        while (buffer.size() == MAX_SIZE) {
            try {
                wait(); // 缓冲区已满,生产者线程等待
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        buffer.add(1);
        notifyAll(); // 唤醒等待的消费者线程
    }
    
    public synchronized void consume() {
        while (buffer.size() == 0) {
            try {
                wait(); // 缓冲区为空,消费者线程等待
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        buffer.removeFirst();
        notifyAll(); // 唤醒等待的生产者线程
    }
}

Dalam contoh di atas, apabila penimbal penuh, utas pengeluar memasuki keadaan menunggu sehingga utas pengguna menggunakan elemen dalam penimbal dan membangunkan pengeluaran atau utas. Apabila penimbal kosong, utas pengguna akan memasuki keadaan menunggu sehingga utas pengeluar menghasilkan elemen baharu dan membangkitkan utas pengguna.

Ringkasan: Kaedah tunggu dan maklumkan ialah alat penting untuk kerjasama dan komunikasi rangkaian di Jawa. Mereka memainkan peranan penting dalam pengaturcaraan berbilang benang. Melalui penggunaan kaedah tunggu dan pemberitahuan yang munasabah, kerjasama dan komunikasi yang elegan antara rangkaian boleh dicapai.

Atas ialah kandungan terperinci Analisis mendalam kaedah objek dalam Java: tunggu dan maklumkan. 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