99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Java 線程生命周期

2018-02-28 15:31 更新

Java線程教程 - Java線程生命周期


線程總是處于以下六種狀態(tài)之一:

  • New
  • Runnable
  • Blocked
  • Waiting
  • Timed-waiting
  • Terminated

線程的所有這些狀態(tài)都是JVM狀態(tài)。

當(dāng)一個(gè)線程被創(chuàng)建并且它的start()方法還沒(méi)有被調(diào)用時(shí),它處于新的狀態(tài)。

Thread  t = new MyThreadClass(); // t is in the   new state

準(zhǔn)備運(yùn)行或運(yùn)行的線程處于可運(yùn)行狀態(tài)。

如果線程嘗試輸入或重新輸入同步的方法或塊,但該監(jiān)視器正在被另一個(gè)線程使用,則該線程處于阻塞狀態(tài)。


狀態(tài)轉(zhuǎn)換

線程可以通過(guò)調(diào)用下表中列出的方法將自身置于等待狀態(tài)。

方法描述
wait()從Object類。
join()從Thread類。
park()從java.util.concurrent.locks.LockSupport類。調(diào)用此方法的線程可以通過(guò)調(diào)用線程上的unpark()方法等待直到許可可用。

線程可以通過(guò)調(diào)用下表中列出的方法將自身置于等待等待狀態(tài)。

描述描述
sleep()從Thread類。
wait (long millis)
wait(long millis, int nanos)
從Object類。
join(long millis)
join(long millis, int nanos)
從Thread類。
parkNanos (long nanos)
parkNanos (Object blocker, long nanos)
從LockSupport類,它在java.util.concurrent.locks包中。
parkUntil (long deadline)
parkUntil (Object blocker, long nanos)
從LockSupport類,它在java.util.concurrent.locks包中。

已完成其執(zhí)行的線程處于終止?fàn)顟B(tài)。

終止的線程不能轉(zhuǎn)換到任何其他狀態(tài)。


例子

我們可以使用一個(gè)線程的isAlive()方法,在它已經(jīng)啟動(dòng)后,知道它是否存活或終止。

我們可以使用Thread類中的getState()方法來(lái)隨時(shí)獲取線程的狀態(tài)。

此方法返回Thread.State枚舉類型的常量之一。

以下代碼演示了線程從一個(gè)狀態(tài)到另一個(gè)狀態(tài)的轉(zhuǎn)換。

class ThreadState extends Thread {
  private boolean keepRunning = true;
  private boolean wait = false;
  private Object syncObject = null;

  public ThreadState(Object syncObject) {
    this.syncObject = syncObject;
  }
  public void run() {
    while (keepRunning) {
      synchronized (syncObject) {
        if (wait) {
          try {
            syncObject.wait();
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
      }
    }
  }

  public void setKeepRunning(boolean keepRunning) {
    this.keepRunning = keepRunning;
  }

  public void setWait(boolean wait) {
    this.wait = wait;
  }
}

public class Main {
  public static void main(String[] args) throws InterruptedException {
    Object syncObject = new Object();
    ThreadState ts = new ThreadState(syncObject);
    System.out.println("Before start()-ts.isAlive():" + ts.isAlive());
    System.out.println("#1:" + ts.getState());

    ts.start();
    System.out.println("After start()-ts.isAlive():" + ts.isAlive());
    System.out.println("#2:" + ts.getState());
    ts.setWait(true);

    Thread.currentThread().sleep(100);

    synchronized (syncObject) {
      System.out.println("#3:" + ts.getState());
      ts.setWait(false);
      syncObject.notifyAll();
    }

    Thread.currentThread().sleep(2000);
    System.out.println("#4:" + ts.getState());
    ts.setKeepRunning(false);

    Thread.currentThread().sleep(2000);
    System.out.println("#5:" + ts.getState());
    System.out.println("At the   end. ts.isAlive():" + ts.isAlive());
  }
}

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)