java 精灵线程_Java线程的状态分析
/*** 線程的狀態分析
*@authoraa
**/
public classThreadState {public static void main(String[] args) throwsException {/*** 新建線程,線程為新建狀態
* jdk:至今尚未啟動的線程的狀態。
* 如果不給線程設置名稱,線程的名稱將會是:Thread-0,Thread-1。。。。。*/ThreadDemo td= newThreadDemo() ;
System.out.println("新建狀態:" + td.getState()) ; //新建狀態:NEW
/*** 可運行狀態:當線程有資格運行,調用start方法,線程首先進入可運行狀態,
* 可運行狀態,不一定被線程調度程序運行,
* 簡單來說,調用start方法后,該線程依然是可運行狀態,但未運行,
* 存放在可運行池中,
* 線程在運行的過程中,該線程的狀態也是可運行狀態
*
* djk:可運行線程的線程狀態。處于可運行狀態的某一線程正在 Java 虛擬機中運行,
* 但它可能正在等待操作系統中的其他資源,比如處理器。*/td.start() ;
System.out.println("可運行狀態:" + td.getState()) ; //可運行狀態:RUNNABLE
/*** Main線程休眠100毫秒時,td線程也就調用了waitForTwoSecond()方法,
* 指定休眠2秒后,再回到可運行狀態
* 指定等待一定時長時,休眠狀態:TIMED_WAITING
* jdk:具有指定等待時間的某一等待線程的線程狀態。某一線程因為調用以下帶有指定正等待時間的方法之一而處于定時等待狀態:
* 帶有超時值的 Thread.sleep (sleep必須帶值)
* 帶有超時值的 Object.wait
* 帶有超時值的 Thread.join*/Thread.sleep(100);
System.out.println("休眠狀態:" + td.getState()) ; //具有指定等待時間的某一等待線程的線程狀態。
/*** 這里Main線程一共休眠2100毫秒時,td線程調用了waitLong()方法,
* 該方法調用了wait(),使線程處于一直等待的狀態
* jdk:某一等待線程的線程狀態。某一線程因為調用下列方法之一而處于等待狀態:
* 不帶超時值的 Object.wait
* 不帶超時值的 Thread.join*/Thread.sleep(2000);
System.out.println("等待狀態:" + td.getState()) ; //等待狀態:WAITING
td.interrupt() ;/*** 這里輸出的也可能是終止狀態
* jdk:受阻塞并且正在等待監視器鎖的某一線程的線程狀態。處于受阻塞狀態的某一線程正在等待監視器鎖,
* 以便進入一個同步的塊/方法,或者在調用 Object.wait 之后再次進入同步的塊/方法。*/td.notifyWait() ;
System.out.println("阻塞狀態:" +td.getState()) ;/*** jdk:已終止線程的線程狀態。線程已經結束執行。*/Thread.sleep(1000);
System.out.println("終止狀態:" +td.getState()) ;/*** 可以簡單歸納為:新建 , 可運行 , 運行 , 阻塞 , 死亡
*
* Thread.yeild() 讓當前運行的線程回到可運行狀態,讓出時間給其他線程運行,但可能沒用
* jdk:暫停當前正在執行的線程對象,并執行其他線程。*/
/*** join()的用法
* jdk:等待該線程終止的時間最長為 millis 毫秒。超時為 0 意味著要一直等下去。
* 簡單來說,如下,由于td線程被Main線程所啟動,td線程調用join方法后,
* 也就是Mian線程要等到td線程運行完畢才會執行join方法后面的代碼,
* jdk的解析在這里就是將Main線程加入到了td線程的后面
* join加參數,在這里意思就是Main線程需要等待2秒時間再繼續執行join方法后面的代碼,*/
//td.join() ;//td.join(2000) ;
System.out.println("線程加入join之后") ;
}private static class ThreadDemo extendsThread {
@Overridepublic voidrun() {try{//測試join方法//for (int i = 0; i < 5; i++) {//System.out.println(i);//sleep(1000) ;//}
waitForTwoSecond() ;
waitLong() ;
}catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}public synchronized void waitForTwoSecond() throwsException {
wait(2000) ;
}public synchronized void waitLong() throwsException {
wait() ;
}public synchronized void notifyWait() throwsException {
notify() ;
}
}
}
總結
以上是生活随笔為你收集整理的java 精灵线程_Java线程的状态分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android电子时钟码源,androi
- 下一篇: python每天1道面试题(3)--字符