Rumah  >  Artikel  >  Java  >  Bagaimanakah Java menggunakan fungsi yield() kelas Thread untuk melepaskan sumber CPU dan memasuki keadaan menunggu?

Bagaimanakah Java menggunakan fungsi yield() kelas Thread untuk melepaskan sumber CPU dan memasuki keadaan menunggu?

WBOY
WBOYasal
2023-07-26 14:01:101706semak imbas

Bagaimana Java menggunakan fungsi yield() kelas Thread untuk melepaskan sumber CPU dan memasuki keadaan menunggu

Dalam pengaturcaraan berbilang benang Java, kelas Thread ialah salah satu kelas asas yang penting. Ia menyediakan fungsi yield() yang meletakkan benang ke dalam keadaan menunggu, yang boleh menyerahkan sumber CPU untuk thread lain untuk dilaksanakan. Artikel ini akan memperkenalkan cara menggunakan fungsi yield() bagi kelas Thread.

1. Peranan fungsi yield()
Fungsi yield() kelas Thread adalah untuk membiarkan thread yang sedang melaksanakan melepaskan sumber CPU supaya thread lain yang mempunyai keutamaan yang sama mempunyai peluang untuk melaksanakan. Jika tiada utas lain dengan keutamaan yang sama, fungsi yield() tidak akan memberi kesan.

2. Cara menggunakan fungsi yield()
Fungsi yield() kelas Thread agak mudah untuk digunakan, panggil sahaja. Berikut ialah kod contoh mudah:

public class YieldExample implements Runnable {
    
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + " running: " + i);
            Thread.yield();
        }
    }
    
    public static void main(String[] args) {
        Thread thread1 = new Thread(new YieldExample(), "Thread 1");
        Thread thread2 = new Thread(new YieldExample(), "Thread 2");
        
        thread1.start();
        thread2.start();
    }
}

Dalam kod di atas, kami telah mencipta kelas yang dipanggil YieldExample yang melaksanakan antara muka Runnable. Kaedah run() menggunakan gelung for untuk mengeluarkan nama dan bilangan larian bagi benang semasa. Dalam setiap gelung, fungsi yield() kelas Thread dipanggil untuk melepaskan sumber CPU. Dua benang dicipta dan dimulakan dalam kaedah main().

3. Kesan dan langkah berjaga-jaga fungsi yield()
Apabila kita menjalankan kod di atas, kita mungkin mendapati bahawa kedua-dua utas tidak semestinya dilaksanakan secara bergilir-gilir. Oleh kerana fungsi yield() hanya memberi peluang kepada thread lain untuk dilaksanakan, tiada jaminan 100% bahawa thread lain akan dilaksanakan. Faktor-faktor seperti strategi penjadualan CPU dan keutamaan utas akan mempengaruhi kesan gangguan fungsi yield().

Selain itu, perlu diingat bahawa walaupun fungsi yield() akan menyerahkan sumber CPU, benang tidak akan memasuki keadaan menunggu, tetapi akan memasuki keadaan sedia, dan mungkin masih dipilih oleh penjadual untuk meneruskan pelaksanaan. Fungsi yield() hanya akan berkuat kuasa jika tiada utas lain dengan keutamaan yang sama.

Ringkasan:
Artikel ini memperkenalkan cara menggunakan fungsi yield() kelas Thread untuk menghasilkan sumber CPU dan memasuki keadaan menunggu. Dengan memanggil fungsi yield(), thread semasa memberikan thread lain dengan keutamaan yang sama peluang untuk dilaksanakan. Perlu diingat bahawa kesan fungsi yield() tidak 100% boleh diramal, dan faktor seperti strategi penjadualan dan keutamaan benang akan mempengaruhi kesannya. Dalam aplikasi praktikal, kita boleh menggunakan fungsi yield() mengikut keperluan khusus untuk mencapai penjadualan benang yang optimum dan penggunaan sumber.

Atas ialah kandungan terperinci Bagaimanakah Java menggunakan fungsi yield() kelas Thread untuk melepaskan sumber CPU dan memasuki keadaan menunggu?. 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