Latest web development tutorials

Contoh Java - Dapatkan negara thread

Contoh Java Contoh Java

Java benang dalam siklus hidup dapat dibagi menjadi lima negara.

  • 1. Buat negara baru (New): membuat objek thread baru.
  • 2. keadaan siap (Runnable): Setelah objek benang dibuat, thread lain memanggil start () method dari objek. Keadaan benang benang runnable di kolam renang terletak, telah menjadi runnable, menunggu untuk memperoleh hak untuk menggunakan CPU.
  • 3. Jalankan Status (Running): siap negara thread mendapat CPU, mengeksekusi kode program.
  • 4. diblokir (Diblokir): benang diblokir untuk beberapa alasan untuk menyerah hak untuk menggunakan CPU sementara berhenti berjalan. Sampai benang ke dalam keadaan siap, kesempatan untuk pergi berjalan. Kasus diblokir tiga kategori:
    • (A), menunggu memblokir: eksekusi menunggu benang run () metode, JVM akan benang ke dalam menunggu kolam renang.
    • (B), blocking sinkron: benang berjalan dalam memperoleh objek kunci sinkronisasi, jika kunci sinkronisasi ditempati oleh thread lain, JVM akan mengunci ke dalam kolam benang.
    • Metode menjalankan eksekusi thread tidur () atau bergabung (), atau mengeluarkan permintaan I / O, JVM akan mengatur benang diblokir: (C) Lainnya diblokir. Ketika tidur () timeout, bergabung () menunggu thread berakhir atau kali keluar, atau I / pengolahan O selesai, benang ke negara siap lagi.
  • 5. negara kematian (Mati): eksekusi thread karena yang abnormal lebih atau keluar dari metode run (), akhir benang dari siklus hidup.

006

Contoh berikut menunjukkan bagaimana untuk mendapatkan keadaan benang:

/*
 author by w3cschool.cc
 Main.java
 */

class MyThread extends Thread{
   boolean waiting= true;
   boolean ready= false;
   MyThread() {
   }
   public void run() {
      String thrdName = Thread.currentThread().getName();
      System.out.println(thrdName + " 启动");
      while(waiting)
      System.out.println("等待:"+waiting);
      System.out.println("等待...");
      startWait();
      try {
         Thread.sleep(1000);
      }
      catch(Exception exc) {
         System.out.println(thrdName + " 中断。");
      }
      System.out.println(thrdName + " 结束。");
   }
   synchronized void startWait() {
      try {
         while(!ready) wait();
      }
      catch(InterruptedException exc) {
         System.out.println("wait() 中断。");
      }
   }
   synchronized void notice() {
      ready = true;
      notify();
   }
}
public class Main {
   public static void main(String args[]) 
   throws Exception{
      MyThread thrd = new MyThread();
      thrd.setName("MyThread #1");
      showThreadStatus(thrd);
      thrd.start();
      Thread.sleep(50);
      showThreadStatus(thrd);
      thrd.waiting = false;
      Thread.sleep(50);
      showThreadStatus(thrd);
      thrd.notice();
      Thread.sleep(50);
      showThreadStatus(thrd);
      while(thrd.isAlive())
      System.out.println("alive");
      showThreadStatus(thrd);
   }
   static void showThreadStatus(Thread thrd) {
      System.out.println(thrd.getName()+" 存活:" +thrd.isAlive()+" 状态:" + thrd.getState() );
   }
}

Kode di atas dijalankan output:

……
alive
alive
alive
MyThread #1 结束。
alive
alive
alive
alive
alive
alive
alive
MyThread #1 存活:false 状态:TERMINATED

Contoh Java Contoh Java