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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java】多线程相关复习—— 线程的创建、名字、运行情况以及顺序控制(join方法) 【一】...

發布時間:2025/4/16 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】多线程相关复习—— 线程的创建、名字、运行情况以及顺序控制(join方法) 【一】... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、創建線程的三種方式

· 繼承Thread類

· 實現Runnable接口

· 實現Callable接口

?

二、 線程狀態

· 線程名字 getName()

· 線程活動情況 isAlive()

· 控制線程運行次序 join()

?

一、 創建線程的三種方式

① 繼承Thread類

/*** 步驟:* 繼承Thread重寫run方法,創建該線程實例,調用start()方法啟動線程* @author ChristineBassoon**/ public class test {public static void main(String[] args) {MyThread t = new MyThread();t.start();}}class MyThread extends Thread{@Overridepublic void run() {for(int i=0;i<50;i++) {System.out.println(i+"["+this.getName()+"]");}} }

?

?同種方法以匿名內部類形式

new Thread(){@Overridepublic void run() {for(int i=0;i<50;i++) {System.out.println(i+"["+Thread.currentThread().getName()+"]");}} }.start();

?

?

② 實現Runnable接口

/*** 步驟:* 實現Runnable接口,重寫run方法,以此Runnable實例作為Thread的target創建Thread對象* 調用start方法啟動線程* @author ChristineBassoon**/ public class test {public static void main(String[] args) {Thread t = new Thread(new MyRunnable());t.start();} }class MyRunnable implements Runnable{@Overridepublic void run() {for(int i=0;i<50;i++) {System.out.println(i+"["+Thread.currentThread().getName()+"]");}} }//匿名內部類形式 new Thread(new Runnable(){@Overridepublic void run() {for(int i=0;i<50;i++) {System.out.println(i+"["+Thread.currentThread().getName()+"]");}}}).start(); }

?

?

③ Callable方式

/*** 步驟:* 1. 實現Callable接口,使用FutureTask類來包裝Callable對象* 2. FutureTaskd對象作為Thread對象的target創建并啟動線程* (FutureTask同時實現了Runnable和Callable接口,所以能作為Thread對象的的target)* 3. FutureTask的get()方法在子線程結束后可獲得返回值(以此判斷線程能否正常運行)*/ public class test {public static void main(String[] args) {CallableThread ct = new CallableThread(); FutureTask ft = new FutureTask<>(ct);new Thread(ft).start();try {System.out.println("子線程返回值為:"+ft.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}}class CallableThread implements Callable {@Overridepublic Integer call() throws Exception {for(int i=0;i<50;i++) {System.out.println(i+"["+Thread.currentThread().getName()+"]");}return 1;} }

?

?

二、線程狀態

線程的幾個狀態可用圖概括 (圖源自google image),解釋得非常清楚

?

//獲取當前線程的名字 Thread.currentThread().getName(); //判斷當前線程運行情況 Thread.currentThread().isAlive(); //設定線程的名字 Thread.currentThread().setName(""); //只有該線程結束后,程序才會向下進行 [new Thread()].join();//[]表示某線程

?

?

① 獲取當前線程名字 —— getName()

情況1,獲取主線程名字

public class ThreadTest {public static void main(String[] args) {System.out.println(Thread.currentThread().getName());} }

?結果為

main View Code

?

情況2:獲取子線程名字

new Thread() {@Overridepublic void run(){for(int i=0;i<5;i++) {System.out.println(i+"["+Thread.currentThread().getName()+"]");System.out.println(i+"["+this.getName()+"]");}} }.start();

?結果為

0[Thread-0] 0[Thread-0] 1[Thread-0] 1[Thread-0] 2[Thread-0] 2[Thread-0] 3[Thread-0] 3[Thread-0] 4[Thread-0] 4[Thread-0] View Code

可看出,子程序運行期間,當前的線程( Thread.currentThread() )名字就是子程序的線程名。

?

?

②線程運行情況,判斷線程是否在運行當中—— isAlive()

public class ThreadTest {public static void main(String[] args) {MyThread myThread = new MyThread();myThread.start();System.out.println("");try {myThread.join();//確保子線程結束后才執行下方語句} catch (InterruptedException e) {e.printStackTrace();}System.out.println("");System.out.println("myThread線程運行情況:"+myThread.isAlive());} }class MyThread extends Thread {public MyThread(){System.out.println("====構造函數開始====");System.out.println(this.isAlive());System.out.println("====構造函數結束====");}@Overridepublic void run(){System.out.println("=====run開始======");System.out.println(this.isAlive());System.out.println("=====run結束======");} }

?結果為:

====構造函數開始==== false ====構造函數結束=========run開始====== true =====run結束======myThread線程運行情況:false View Code

?總結:子線程只有調用start()方法后才會運行。

?

?

③ 線程之間的運行順序 —— join() 方法的調控

?接下來我們實驗一下:

public class condition {public static void main(String[] args) {MyThread myThread = new MyThread();myThread.setName("子線程");//設定子線程名字myThread.start();System.out.println();System.out.println("主線程運行完畢");} }class MyThread extends Thread {@Overridepublic void run(){for(int i=0;i<20;i++) {System.out.println(i+"["+this.getName()+"]");}} }

結果:

主線程運行完畢 0[子線程] 1[子線程] 2[子線程] 3[子線程] 4[子線程] 5[子線程] 6[子線程] 7[子線程] 8[子線程] 9[子線程] 10[子線程] 11[子線程] 12[子線程] 13[子線程] 14[子線程] 15[子線程] 16[子線程] 17[子線程] 18[子線程] 19[子線程] View Code

如果按照執行次序,本來應該最后打印的內容應該最后顯示的,現在卻放在最前頭了。事實上,線程之間會互相爭奪cpu資源,誰先搶到誰執行,像上述這種情況,則是主線程先搶到了cpu資源。如果必須保證先執行子線程,最后再執行主線程的打印動作的話,可以使用 join() 方法控制線程之間的執行次序。

?

我們再來實驗一下主線程和單個子線程

public class condition {public static void main(String[] args) {MyThread myThread = new MyThread();myThread.setName("子線程");//設定子線程名字myThread.start();try {myThread.join(); } catch (InterruptedException e) {e.printStackTrace();} System.out.println("主線程運行完畢");} }class MyThread extends Thread {@Overridepublic void run(){for(int i=0;i<5;i++) {System.out.println(i+"["+this.getName()+"]");}} }

?結果為

0[子線程] 1[子線程] 2[子線程] 3[子線程] 4[子線程] 主線程運行完畢

?

兩個或多個子線程之間的順序同樣如此,

如果執行順序限制為 【子線程1 → 子線程2 → 主線程結束】

public class condition {public static void main(String[] args) {MyThread t1 = new MyThread("子線程1");MyThread t2 = new MyThread("子線程2");try {t1.start();t1.join();//join()方法只有在調用start()方法后使用才有意義t2.start();t2.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("主線程結束");} }class MyThread extends Thread {public MyThread(String string) {this.setName(string);}@Overridepublic void run(){for(int i=0;i<5;i++) {System.out.println(i+"["+this.getName()+"]");}} }

?結果為:

0[子線程1] 1[子線程1] 2[子線程1] 3[子線程1] 4[子線程1] 0[子線程2] 1[子線程2] 2[子線程2] 3[子線程2] 4[子線程2] 主線程結束 View Code

?

?

參考:https://www.cnblogs.com/songshu120/p/7966314.html(多線程創建的三種方式)

轉載于:https://www.cnblogs.com/tubybassoon/p/9692964.html

總結

以上是生活随笔為你收集整理的【Java】多线程相关复习—— 线程的创建、名字、运行情况以及顺序控制(join方法) 【一】...的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 4388成人网| 午夜tv影院| 公车激情云雨小说 | 欧美69久成人做爰视频 | 另类综合小说 | 精品黑人一区二区三区国语馆 | 噼里啪啦国语版在线观看 | 动漫精品一区一码二码三码四码 | 一级作爱片| 少妇扒开粉嫩小泬视频 | 美女日批网站 | 18p在线观看 | 国产成人无码精品久久 | 一色屋免费视频 | 欧美国产高潮xxxx1819 | 99热精品久久 | 99在线观看免费视频 | 在线观看免费小视频 | 亚洲激情文学 | 人人射人人| 伊人久久精品视频 | 在线观看成人 | 久久精品在线观看 | 国产激情视频一区二区三区 | 亚洲你懂的 | 精品人妻一区二区色欲产成人 | 熟妇人妻va精品中文字幕 | 性色av无码久久一区二区三区 | 国产成人精品一区二区三区福利 | 亚洲二区一区 | 国产精品免费一区二区三区在线观看 | 亚洲石原莉奈一区二区在线观看 | 超碰天天 | 国产成a人亚洲精v品无码 | 久久精品第一页 | 亚洲色图狠狠干 | 公车乳尖揉捏酥软呻吟 | 国产精品系列在线观看 | 黄色香港三级三级三级 | 黄色一级大片免费看 | 97在线观看视频免费 | 日本三级中国三级99人妇网站 | 91网站在线观看视频 | 大色网小色网 | yellow免费在线观看 | 免费性网站 | 91视频社区| 波多一区二区 | 欧美黑人一区 | 日日爽天天 | 日本三级少妇 | 欧美日韩精品一区 | 日韩精品视频免费在线观看 | 亚洲人在线 | 靠逼动漫 | 国内9l自拍 | 福利在线国产 | 69精品一区二区三区 | 美女激情网 | 不卡视频一区 | 日韩午夜视频在线观看 | 制服下的诱惑暮生 | 久久久精品一区 | 在线色播 | 别揉我奶头一区二区三区 | 欧美在线v | www毛片 | 操夜夜 | 成人av电影在线播放 | 亚洲高清成人 | 日日狠狠| 久久66热这里只有精品 | 国产一级免费在线观看 | 一区二区三区四区精品 | 巨乳xxx| 熟妇人妻系列aⅴ无码专区友真希 | 国产成人精品一区二区三区 | 操的网站| 秘密爱大尺度做爰呻吟 | 亚洲第一在线播放 | 青青草激情 | 欧美一区二区三区激情视频 | 银娇在线观看 | 特黄在线 | www..com黄色 | 欧美精品国产一区二区 | 亚洲电影一区二区 | 久草99| 销魂美女一区二区 | 三上悠亚亚洲一区 | av首页在线| 午夜少妇av| 二级毛片在线观看 | 久久国语 | 国偷自拍第113页 | 99爱视频在线观看 | 成人免费视频国产 | 痴汉电车在线播放 | 丝袜美腿亚洲一区二区图片 |