Rumah  >  Artikel  >  Java  >  Penjelasan terperinci tentang lima keadaan benang Java dan peraturan peralihan keadaan

Penjelasan terperinci tentang lima keadaan benang Java dan peraturan peralihan keadaan

王林
王林asal
2024-02-19 17:03:06552semak imbas

Penjelasan terperinci tentang lima keadaan benang Java dan peraturan peralihan keadaan

Pemahaman mendalam tentang lima keadaan benang Java dan peraturan penukarannya

1 Pengenalan kepada lima keadaan benang
Di Jawa, kitaran hayat benang boleh dibahagikan kepada lima keadaan berbeza, termasuk. keadaan baru (BARU) , keadaan sedia (RUNNABLE), keadaan berjalan (RUNNING), keadaan disekat (BLOCKED) dan keadaan ditamatkan (TERMINATED).

  1. Keadaan baharu (BARU): Apabila objek benang dicipta, ia berada dalam keadaan baharu. Pada ketika ini, objek benang telah memperuntukkan sumber yang mencukupi untuk melaksanakan tugas, tetapi masih belum mula melaksanakan kaedah run().
  2. Keadaan sedia (RUNNABLE): Apabila benang memanggil kaedah mula(), benang akan memasuki keadaan sedia. Benang dalam keadaan sedia mempunyai syarat untuk dijalankan dan sedang menunggu CPU memperuntukkan segmen masa untuk melaksanakan kod.
  3. Keadaan berjalan (RUNNING): Apabila benang dalam keadaan sedia memperoleh segmen masa CPU, ia memasuki keadaan berjalan dan mula melaksanakan kod dalam kaedah run(). Benang akan terus berjalan sehingga ia ditamatkan sendiri atau diganggu oleh benang lain.
  4. Keadaan disekat (DISEKAT): Dalam keadaan berikut, benang akan memasuki keadaan disekat:

    • Kaedah sleep() dipanggil dan sumber CPU secara aktif diserahkan.
    • Menunggu keluaran sumber, seperti sumber terkunci.
    • Thread menunggu penyiapan utas lain dalam kaedah join().
  5. Keadaan ditamatkan (TERMINATED): Selepas benang tamat, ia memasuki keadaan ditamatkan. Selepas utas melengkapkan pelaksanaan kod dalam kaedah run() atau utas ditamatkan kerana pengecualian atau sebab lain, utas akan memasuki keadaan ditamatkan.

2. Peraturan penukaran antara negeri
Terdapat peraturan penukaran tertentu antara keadaan urutan di bawah kami memperkenalkan peraturan penukaran antara setiap negeri.

  1. Keadaan baharu (BARU) ditukar kepada keadaan sedia (RUNNABLE): Apabila objek benang dicipta dan kaedah mula() dipanggil, benang ditukar daripada keadaan baharu kepada keadaan sedia.
  2. Tukar keadaan sedia (RUNNABLE) kepada keadaan berjalan (RUNNING): Apabila benang memperoleh sumber CPU, ia berubah daripada keadaan sedia kepada keadaan berjalan.
  3. Menukar keadaan berjalan (RUNNING) kepada keadaan menyekat (BLOCKED): Semasa pelaksanaan, benang mungkin memasuki keadaan menyekat kerana menunggu pelepasan sumber atau melepaskan sumber CPU secara aktif.
  4. Tukar keadaan menyekat (DISEKAT) kepada keadaan sedia (BOLEH DIJALANKAN): Apabila sumber yang ditunggu-tunggu benang dikeluarkan, atau masa menunggu tamat, ia akan menukar daripada keadaan menyekat kepada keadaan sedia.
  5. Menukar keadaan larian (RUNNING) kepada keadaan ditamatkan (DITERMINATED): Apabila kaedah run() thread selesai atau thread ditamatkan kerana pengecualian, thread akan bertukar daripada keadaan running kepada keadaan ditamatkan.

3. Contoh Kod

Berikut ialah contoh kod ringkas yang menunjukkan peraturan penukaran antara keadaan benang:

class MyThread extends Thread {
    
    @Override
    public void run() {
        try {
            Thread.sleep(1000);
            System.out.println("线程执行完毕");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

public class ThreadStateDemo {

    public static void main(String[] args) {
        MyThread thread = new MyThread();
        System.out.println("线程创建后状态:" + thread.getState());

        thread.start();
        System.out.println("调用start()方法后状态:" + thread.getState());

        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("等待500ms后状态:" + thread.getState());

        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("调用join()方法后状态:" + thread.getState());
    }
}

Jalankan kod di atas, anda boleh melihat output seperti berikut:

线程创建后状态:NEW
调用start()方法后状态:RUNNABLE
等待500ms后状态:RUNNABLE
线程执行完毕
调用join()方法后状态:TERMINATED

Kod di atas mencipta warisan Objek Thread MyThread dari kelas Thread. Dalam benang utama, kita boleh melihat perubahan keadaan objek benang pada peringkat yang berbeza.

Dengan mempunyai pemahaman yang mendalam tentang lima keadaan benang Java dan peraturan penukarannya, kami dapat memahami dengan lebih baik prinsip multi-benang dan meningkatkan lagi keupayaan pengaturcaraan serentak. Pada masa yang sama, dalam proses pembangunan sebenar, pertimbangan dan pemprosesan status benang juga sangat penting. Saya harap artikel ini dapat membantu semua orang.

Atas ialah kandungan terperinci Penjelasan terperinci tentang lima keadaan benang Java dan peraturan peralihan keadaan. 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