Rumah  >  Artikel  >  Java  >  Ketahui fungsi dan aplikasi kaedah objek tunggu dan maklumkan dalam Java

Ketahui fungsi dan aplikasi kaedah objek tunggu dan maklumkan dalam Java

WBOY
WBOYasal
2023-12-20 11:39:29894semak imbas

Ketahui fungsi dan aplikasi kaedah objek tunggu dan maklumkan dalam Java

Fahami kaedah objek dalam Java: peranan dan penggunaan tunggu dan maklumkan

Di Java, kaedah objek ialah alat penting untuk melaksanakan pengaturcaraan serentak. Antaranya, tunggu dan maklumkan ialah dua kaedah yang biasa digunakan, digunakan untuk melaksanakan operasi menunggu benang dan bangun. Artikel ini akan memperkenalkan kedua-dua kaedah ini secara terperinci dan memberikan beberapa contoh kod khusus. Kaedah

tunggu ialah kaedah yang ditakrifkan dalam kelas Objek Ia digunakan untuk meletakkan utas semasa ke dalam keadaan menunggu sehingga utas lain memanggil kaedah notify atau notifyAll bagi objek yang sama untuk membangunkannya. Sebelum memanggil kaedah tunggu, benang mesti mendapatkan kunci monitor objek terlebih dahulu. Kaedah tunggu mempunyai dua bentuk terlebih muatan:

  1. wait(): membuat utas semasa menunggu sehingga utas lain membangunkannya.
  2. tunggu(masa tamat lama): Menjadikan utas semasa menunggu bilangan milisaat yang ditentukan, atau sehingga utas lain membangunkannya.

Berikut ialah contoh kod yang menggunakan kaedah tunggu untuk melaksanakan model pengeluar-pengguna:

public class ProducerConsumer {
    private final Object lock = new Object();
    private List<String> buffer = new ArrayList<>();
    private int bufferSize = 10;
    
    public void produce() throws InterruptedException {
        synchronized (lock) {
            // 判断缓冲区是否已满
            while (buffer.size() == bufferSize) {
                lock.wait(); // 等待消费者消费
            }
            // 生产物品到缓冲区
            buffer.add("Item");
            System.out.println("生产者生产一个物品,缓冲区大小:" + buffer.size());
            // 唤醒等待的消费者线程
            lock.notifyAll();
        }
    }
    
    public void consume() throws InterruptedException {
        synchronized (lock) {
            // 判断缓冲区是否为空
            while (buffer.isEmpty()) {
                lock.wait(); // 等待生产者生产
            }
            // 从缓冲区消费物品
            String item = buffer.remove(0);
            System.out.println("消费者消费一个物品,缓冲区大小:" + buffer.size());
            // 唤醒等待的生产者线程
            lock.notifyAll();
        }
    }
}

Dalam kod di atas, pengeluar menggunakan kaedah tunggu untuk meletakkan dirinya dalam keadaan menunggu sehingga penimbal penuh sebelum menghasilkan ; pengguna menggunakan Kaedah tunggu meletakkan dirinya dalam keadaan menunggu sehingga penimbal tidak kosong sebelum dimakan. Apabila pengeluar menghasilkan item atau pengguna menggunakan item, kaedah notifyAll objek dipanggil untuk membangkitkan benang menunggu. Kaedah

notify juga merupakan kaedah yang ditakrifkan dalam kelas Objek Ia digunakan untuk membangkitkan benang menunggu objek yang sama. Tidak seperti kaedah notifyAll, kaedah notify hanya boleh membangkitkan salah satu utas. Berikut ialah contoh menggunakan kaedah pemberitahuan:

public class ThreadMonitor {
    private final Object lock = new Object();
    
    public void performTask() throws InterruptedException {
        synchronized (lock) {
            System.out.println("线程" + Thread.currentThread().getId() + "开始执行任务");
            lock.wait(); // 等待唤醒
            System.out.println("线程" + Thread.currentThread().getId() + "继续执行任务");
        }
    }
    
    public void wakeUpThread() {
        synchronized (lock) {
            lock.notify(); // 唤醒等待的线程
        }
    }
}

Dalam kod di atas, kaedah performTask meletakkan utas dalam keadaan menunggu sehingga utas lain memanggil kaedah wakeUpThread untuk membangunkannya. Kaedah wakeUpThread menggunakan kaedah pemberitahuan untuk membangunkan utas menunggu.

Perlu diingat bahawa apabila menggunakan kaedah tunggu dan maklumkan, anda mesti mendapatkan kunci monitor objek terlebih dahulu, iaitu menggunakannya dalam blok kod yang disegerakkan atau kaedah yang disegerakkan.

Ringkasnya, tunggu dan maklumkan adalah kaedah penting dalam Java untuk merealisasikan komunikasi antara benang. Mereka boleh melaksanakan operasi menunggu dan bangun rangkaian, dan digunakan untuk menyelaraskan urutan pelaksanaan berbilang rangkaian dan akses kepada sumber yang dikongsi. Contoh kod yang disediakan dalam artikel ini boleh membantu pembaca lebih memahami penggunaan kedua-dua kaedah ini. Dengan menggunakan kaedah tunggu dan pemberitahuan dengan betul, kami boleh menulis program berbilang benang yang lebih selamat dan cekap.

Atas ialah kandungan terperinci Ketahui fungsi dan aplikasi kaedah objek tunggu dan maklumkan dalam Java. 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