日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1.4 isAlive()方法

發布時間:2024/4/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.4 isAlive()方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

方法isAlive()是判斷當前線程是否處于活動狀態。

線程代碼:

public class TestThread extends Thread{@Overridepublic void run() {System.out.println("run=" + this.isAlive());} }

運行代碼:

?

public class Main {public static void main(String[] args) {TestThread tt = new TestThread();System.out.println("Begin == " + tt.isAlive());tt.start();//這行代碼的結果是不確定的,打印true表示tt線程還未執行完畢,打印false表示tt線程已經執行完畢。下面會給出結果為false的情況System.out.println("end == " + tt.isAlive());} }

?

運行結果:

方法isAlive()是測試線程是否處于活躍狀態的方法,

活躍狀態:線程已經啟動且尚未終止。線程處于正在運行或準備開始運行的狀態,就認為線程是“存活的”。

結果為false的執行代碼:

public class Main {public static void main(String[] args) {try {TestThread tt = new TestThread();System.out.println("Begin == " + tt.isAlive());tt.start();//通過這行代碼使當前線程睡眠,讓tt線程完成并結束Thread.sleep(1000);System.out.println("end == " + tt.isAlive());} catch (Exception e) {e.printStackTrace();}} }

執行結果:

?

在使用isAlive()方法時,如果將線程對象以構造參數的方式傳遞給Thread對象進行start()啟動時,運行的結果和前面會有差異。產生差異的原因在于:Thread.currentThread()和this的差異。

測試線程代碼:

public class countOperate extends Thread {public countOperate() {System.out.println("countOperate------begin");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("countOperate-------end");}@Overridepublic void run() {System.out.println("run-----begin");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-----end");} }

執行代碼:

public class Main {public static void main(String[] args) {countOperate co = new countOperate();Thread t = new Thread(co);System.out.println("main begin t isAlive = " + t.isAlive());t.setName("A");t.start();System.out.println("main end t isAlive = " + t.isAlive());} }

執行結果:

?

最后這個運行結果, 真的是驚了。我覺得run里面的this.isAlive()應該為true的,我認為this指代的就是開啟的另一條線程,而main跟a其實都是主線程。后來發現不太對:

修改執行代碼:

public class Main {public static void main(String[] args) {countOperate co = new countOperate();Thread t = new Thread(co);System.out.println("main begin t isAlive = " + t.isAlive());//t.setName("A"); t.start();System.out.println("main end t isAlive = " + t.isAlive());} }

執行結果:

然后我思考了一下:在個人的見解上認為了Thread.currentThread()獲取的線程與this的線程的區別。

Thread.currentThread()獲取的為當前運行的線程

    注:(在完成CountOperate的構造方法時,運行的是主線程,在調用start()時運行的是t線程。)。

this獲取的為當前所在的線程

    注:(所以不論是構造方法中還是run方法中他都位于同一個線程,且這個線程從頭到尾都沒有被開啟)。

源碼地址:https://github.com/lilinzhiyu/threadLearning

?

本文內容是書中內容兼具自己的個人看法所成。可能在個人看法上會有諸多問題(畢竟知識量有限,導致認知也有限),如果讀者覺得有問題請大膽提出,我們可以相互交流、相互學習,歡迎你們的到來,心成意足,等待您的評價。

?

?

轉載于:https://www.cnblogs.com/lilinzhiyu/p/7941121.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的1.4 isAlive()方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。