isAlive()方法的作用
isAlive() 方法的作用是判斷當前的線程是否處于活動狀態。
什么是活動狀態呢?活動狀態就是線程已經啟動且尚未終止。線程處于正在運行或準備開始運行的狀態,就認為線程是“存活”的。
例 1
下面通過一個案例來理解 isAlive() 方法判斷線程是否活動的標準。假設 MyThread 線程類的代碼如下:
如上述代碼所示,MyThread 類的代碼非常簡單,只是在 run() 方法中調用 isAlive() 方法輸出當前線程的活動狀態。
下面編寫啟動 MyThread 線程的代碼,具體實現如下:
public class Test {public static void main(String[] args){ MyThread myThread=new MyThread();//創建MyThread線程實例System.out.println("begin="+myThread.isAlive());//輸出線程狀態myThread.start();//啟動線程System.out.println("end="+myThread.isAlive());//輸出線程狀態} }執行后的輸出結果如下:
begin==false end==true run=true在這里需要注意如下一行代碼:
System.out.println("end=="+mythread.isAlive());雖然在本示例中這行語句輸出的值是 true,但此值是不確定的。輸出 true 值是因為 mythread 線程還未執行完畢,所以輸出 true。如果代碼更改成如下形式:
public class Test {public static void main(String[] args) throws InterruptedException{ MyThread myThread=new MyThread();//創建MyThread線程實例System.out.println("begin="+myThread.isAlive());//輸出線程狀態myThread.start();//啟動線程Thread.sleep(1000);//延時1000毫秒System.out.println("end="+myThread.isAlive());//輸出線程狀態} }再次運行主線程,此時的輸出結果如下:
begin==false run=true end==false此時 end 的返回值為 false,這是因為 myThread 對象已經在 1 秒之內執行完畢。
例 2
在使用 isAlive() 方法時,如果將線程對象以構造參數的方式傳遞給 Thread 對象進行 start() 啟動,運行的結果和前面示例是有差異的。造成這樣的差異的原因還是來自于 Thread.currentThread() 和 this 的差異。下面通過一個案例來驗證這一點。
(1) 首先創建案例所使用的線程類,具體代碼如下:
public class MyThread extends Thread {public MyThread(){System.out.println("構造方法---開始");System.out.println("Thread.currentThread().getName()="+Thread.currentThread().getName());System.out.println("Thread.currentThread().isAlive()="+Thread.currentThread().isAlive());System.out.println("this.getName()="+this.getName());System.out.println("this.isAlive()="+this.isAlive());System.out.println("構造方法---結束");}@Overridepublic void run(){System.out.println("run()方法---開始");System.out.println("Thread.currentThread().getName()="+Thread.currentThread().getName());System.out.println("Thread.currentThread().isAlive()="+Thread.currentThread().isAlive());System.out.println("this.getName()="+this.getName());System.out.println("this.isAlive()="+this.isAlive());System.out.println("run()方法---結束");} }(2) 接下來編寫主線程代碼,創建 MyThread 線程實例并啟動線程。代碼如下:
public class Test {public static void main(String[] args) throws InterruptedException{ MyThread myThread=new MyThread();//創建MyThread線程實例Thread t=new Thread(myThread);//創建一個線程System.out.println("main begin t1 isAlive="+t.isAlive());//輸出線程狀態t.setName("A");//設置線程名稱t.start();//啟動線程System.out.println("main end t1 isAlive="+t.isAlive());//輸出線程狀態} }程序運行結果如下:
構造方法---開始 Thread.currentThread().getName()=main Thread.currentThread().isAlive()=true this.getName()=Thread-0 this.isAlive()=false 構造方法---結束 main begin t1 isAlive=false main end t1 isAlive=true run()方法---開始 Thread.currentThread().getName()=A Thread.currentThread().isAlive()=true this.getName()=Thread-0 this.isAlive()=false run()方法---結束總結
以上是生活随笔為你收集整理的isAlive()方法的作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: currentThread()方法的作用
- 下一篇: getId()方法的作用