Rumah  >  Artikel  >  Java  >  Penerokaan mendalam tentang pengaturcaraan serentak kaedah tunggu dan pemberitahuan dalam Java

Penerokaan mendalam tentang pengaturcaraan serentak kaedah tunggu dan pemberitahuan dalam Java

WBOY
WBOYasal
2023-12-20 09:08:55699semak imbas

Penerokaan mendalam tentang pengaturcaraan serentak kaedah tunggu dan pemberitahuan dalam Java

Pengaturcaraan serentak di Java sentiasa menjadi salah satu topik penting yang perlu difahami dan dikuasai oleh pembangun secara mendalam. Dalam pengaturcaraan serentak, mengawal kerjasama dan komunikasi antara utas adalah penting, dan kaedah menunggu dan memberitahu adalah alat utama. Artikel ini akan menyelidiki prinsip, penggunaan dan contoh kod khusus kaedah menunggu dan memberitahu dalam Java untuk membantu pembaca lebih memahami kedua-dua kaedah penting ini dalam pengaturcaraan serentak.

kaedah tunggu dan maklumkan ialah dua kaedah penting dalam kelas Objek Ia biasanya digunakan untuk mencapai kerjasama dan komunikasi antara rangkaian. Kaedah tunggu digunakan untuk meletakkan utas semasa ke dalam keadaan menunggu dan melepaskan kunci objek, manakala kaedah pemberitahuan digunakan untuk membangunkan utas menunggu. Dengan menggabungkan kaedah menunggu dan memberitahu, penyegerakan dan kerjasama antara utas boleh dicapai untuk memastikan pelaksanaan teratur antara utas.

Mula-mula, mari kita lihat pada penggunaan asas dan prinsip kaedah menunggu dan memberitahu. Sebelum menggunakan kaedah tunggu dan maklumkan, anda perlu mendapatkan kunci objek terlebih dahulu, yang boleh dicapai melalui kata kunci yang disegerakkan. Setelah kunci objek diperoleh, kaedah tunggu boleh dipanggil untuk meletakkan utas dalam keadaan menunggu dan kunci objek dilepaskan dan kaedah pemberitahuan boleh dipanggil untuk membangunkan utas menunggu. Perlu diingat bahawa kaedah tunggu dan pemberitahuan mesti dipanggil dalam blok atau kaedah kod yang disegerakkan, jika tidak, IllegalMonitorStateException akan terhasil.

Sekarang, mari kita tunjukkan penggunaan kaedah menunggu dan memberitahu melalui contoh kod tertentu.

public class WaitNotifyExample {
    public static void main(String[] args) {
        final Object lock = new Object();

        // 等待线程
        Thread waitThread = new Thread(() -> {
            synchronized (lock) {
                System.out.println("等待线程开始等待...");
                try {
                    lock.wait(); // 线程进入等待状态,并释放锁
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("等待线程被唤醒");
            }
        });

        // 唤醒线程
        Thread notifyThread = new Thread(() -> {
            synchronized (lock) {
                System.out.println("唤醒线程开始唤醒等待线程...");
                lock.notify(); // 唤醒等待线程
            }
        });

        waitThread.start();
        notifyThread.start();
    }
}

Dalam contoh ini, kami mencipta utas menunggu dan utas bangun tidur, yang berkongsi kunci objek yang sama. Dalam benang menunggu, kita mula-mula memperoleh kunci objek, dan kemudian memanggil kaedah tunggu untuk meletakkan benang ke dalam keadaan menunggu dan melepaskan kunci. Dalam urutan bangun tidur, kami juga mula-mula mendapatkan kunci objek, dan kemudian memanggil kaedah pemberitahuan untuk membangunkan utas menunggu. Dengan cara ini, kami mencapai kerjasama dan komunikasi antara rangkaian.

Selain kaedah tunggu dan pemberitahuan asas, Java juga menyediakan kaedah tunggu (masa tamat lama) dan notifyAll (). tunggu(masa tamat lama) boleh menentukan masa menunggu utas, yang akan bangun secara automatik selepas masa yang ditentukan, notifyAll() boleh membangunkan semua utas menunggu. Penggunaan fleksibel kaedah ini dapat memenuhi keperluan pengaturcaraan serentak yang berbeza dengan lebih baik.

Ringkasnya, kaedah tunggu dan maklumkan ialah alat penting untuk merealisasikan kerjasama dan komunikasi antara utas di Java, dan memainkan peranan penting dalam pengaturcaraan serentak. Dengan pemahaman yang mendalam tentang prinsip dan penggunaan kedua-dua kaedah ini, digabungkan dengan contoh kod khusus, kami boleh menguasai pengurusan benang dan kemahiran kerjasama dengan lebih baik dalam pengaturcaraan serentak, dan meningkatkan prestasi dan kebolehpercayaan program. Saya harap artikel ini dapat membantu pembaca mendapatkan pemahaman yang lebih mendalam tentang pengaturcaraan serentak.

Atas ialah kandungan terperinci Penerokaan mendalam tentang pengaturcaraan serentak kaedah tunggu dan pemberitahuan 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