Rumah  >  Artikel  >  Java  >  Analisis peralihan keadaan benang Java dan contoh operasi

Analisis peralihan keadaan benang Java dan contoh operasi

王林
王林asal
2024-02-18 21:43:07583semak imbas

Analisis peralihan keadaan benang Java dan contoh operasi

Memahami perubahan dalam status benang Java dan operasi yang sepadan memerlukan contoh kod khusus

Dalam pengaturcaraan berbilang benang Java, perubahan status benang adalah sangat penting. Memahami perubahan keadaan benang dan cara mengendalikan benang akan membantu kami memahami konsep teras pengaturcaraan berbilang benang dengan lebih baik.

Status benang Java boleh dibahagikan kepada 6 jenis: Baharu, Boleh Dijalankan, Berjalan, Disekat, Menunggu dan Ditamatkan. Di bawah ini kami akan memperkenalkan keadaan ini satu demi satu dan memberikan contoh kod yang sepadan.

  1. Keadaan baharu (Baharu):
    Dalam keadaan baharu, objek benang telah dibuat, tetapi kaedah mula()nya belum dipanggil lagi. Dalam keadaan ini, benang tidak menduduki sumber CPU.
    Berikut ialah contoh kod untuk mencipta utas baharu:
Thread thread = new Thread();
  1. Keadaan sedia (Boleh Dijalankan):
    Dalam keadaan sedia, utas telah memanggil kaedah mula() dan sedang menunggu peruntukan sumber untuk pelaksanaan. Apabila benang memperoleh sumber CPU, ia memasuki keadaan berjalan.
    Berikut ialah contoh kod untuk utas untuk memasuki keadaan sedia:
Thread thread = new Thread(() -> {
    // 执行一些任务
});

thread.start();
  1. Keadaan berjalan (Berjalan):
    Dalam keadaan berjalan, utas sedang melaksanakan tugas. Benang boleh secara aktif melepaskan sumber CPU, atau ia boleh didahulukan oleh utas keutamaan tinggi yang lain.
    Berikut ialah contoh kod untuk utas memasuki keadaan berjalan:
Thread thread = new Thread(() -> {
    // 执行一些任务
});

thread.start();
  1. Keadaan disekat (Disekat):
    Dalam keadaan disekat, utas sedang menunggu keluaran sumber. Apabila syarat tertentu dipenuhi, benang akan memasuki semula keadaan sedia.
    Berikut ialah contoh kod untuk thread untuk memasuki keadaan menyekat:
Object lock = new Object();

Thread thread1 = new Thread(() -> {
    synchronized (lock) {
        try {
            lock.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
});

Thread thread2 = new Thread(() -> {
    synchronized (lock) {
        lock.notify();
    }
});

thread1.start();
thread2.start();

Dalam kod di atas, thread1 memanggil kaedah lock.wait() untuk memasuki keadaan menyekat sehingga thread2 memanggil lock.notify () kaedah untuk membangunkannya.

  1. Menunggu:
    Dalam keadaan menunggu, benang sedang menunggu syarat tertentu untuk dipenuhi. Tidak seperti keadaan menyekat, utas dalam keadaan menunggu memerlukan utas lain untuk bangun.
    Berikut ialah contoh kod untuk thread untuk memasuki keadaan menunggu:
Object lock = new Object();

Thread thread1 = new Thread(() -> {
    synchronized (lock) {
        try {
            lock.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
});

Thread thread2 = new Thread(() -> {
    synchronized (lock) {
        lock.notify();
    }
});

thread1.start();
thread2.start();

Dalam kod di atas, thread1 memanggil kaedah lock.wait() untuk memasuki keadaan menunggu sehingga thread2 memanggil lock.notify () kaedah untuk membangunkannya.

  1. Keadaan ditamatkan (Ditamatkan):
    Dalam keadaan ditamatkan, urutan telah menyelesaikan tugasan atau ditamatkan kerana pengecualian. Urutan dalam keadaan ditamatkan tidak boleh berubah kembali kepada keadaan lain.
    Berikut ialah contoh kod untuk thread untuk memasuki keadaan ditamatkan:
Thread thread = new Thread(() -> {
    // 执行一些任务
});

thread.start();

// 等待线程执行完毕
thread.join();

Dalam kod di atas, dengan memanggil kaedah thread.join(), thread utama akan menunggu sehingga thread menyelesaikan tugasan sebelum meneruskan untuk berlari.

Ringkasnya, memahami perubahan dalam status benang Java dan operasi yang sepadan adalah penting untuk pengaturcaraan berbilang benang. Melalui contoh kod, kami dapat memahami dengan lebih intuitif ciri-ciri setiap keadaan benang dan cara melaksanakan operasi peralihan keadaan.

Atas ialah kandungan terperinci Analisis peralihan keadaan benang Java dan contoh operasi. 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