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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java线程方法_Java线程的三种方式

發(fā)布時間:2025/4/16 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java线程方法_Java线程的三种方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

創(chuàng)建線程有三種方式:

1.繼承Thread類

2.實(shí)現(xiàn)Runnable接口

3.使用Callable和Future創(chuàng)建線程

三種方式詳解如下:

---------------------------------------------------------------------------

1.繼承Thread類創(chuàng)建線程類

(1).重寫run()方法,run()方法即是線程的執(zhí)行體

(2).實(shí)例化線程類

(3).調(diào)用start()方法,啟動線程

代碼示例:

public class MyThread extendsThread {int i = 0;public voidrun() {for(; i <= 50;i++) {

System.out.println(getName()+i);

}

}public static voidmain(String args[]) {for(int i=0;i <= 50;i++) {if(i == 10) {

MyThread myThread= newMyThread();

myThread.start();

}

}

}

}

2.創(chuàng)建實(shí)現(xiàn)Runnable接口的線程類:

(1)重寫run()方法,run()方法是線程的執(zhí)行體

(2)創(chuàng)建線程類的實(shí)例,并以該實(shí)例為對象創(chuàng)建Thread類的實(shí)例,Thread類對象才是真正的線程對象

(3)通過Thread對象調(diào)用start()方法,啟動線程

代碼示例:

public class MyRunnable implementsRunnable {private inti;

@Overridepublic voidrun() {//TODO Auto-generated method stub

for(int i=0; i<=50;i++) {

System.out.println(Thread.currentThread().getName()+i);

}

}public static voidmain(String args[]) {

MyRunnable myRunnable= newMyRunnable();

Thread thread= new Thread(myRunnable, "new Thread");

thread.start();

}

}

3.通過Callable和Future創(chuàng)建線程:

(1)創(chuàng)建Callable接口的實(shí)現(xiàn)類,并實(shí)現(xiàn)call()方法,該call()方法將作為線程執(zhí)行體,并且有返回值。

(2)創(chuàng)建Callable實(shí)現(xiàn)類的實(shí)例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值

(3)使用FutureTask對象作為Thread對象的參數(shù)創(chuàng)建并啟動新線程

(4)調(diào)用FutureTask對象的get()方法來獲得子線程執(zhí)行結(jié)束后的返回值

代碼示例:

importjava.util.concurrent.Callable;importjava.util.concurrent.FutureTask;public class CallableThread implements Callable{

@Overridepublic Integer call() throwsException {//TODO Auto-generated method stub

int i = 0;for(;i<=50;i++) {

System.out.println(Thread.currentThread().getName()+i);

}returni;

}public static voidmain(String args[]) {

CallableThread ct= newCallableThread();

FutureTask ft = new FutureTask<>(ct);for(int i=0;i <= 50;i++) {new Thread(ft,"返回線程").start();

}try{

System.out.println("線程的返回值:" +ft.get());

}catch(Exception e) {//TODO: handle exception

e.printStackTrace();

}

}

}

通過以上的代碼實(shí)例,我們可以看到:

基于Runnablehe和Callable接口實(shí)現(xiàn)的線程類比較靈活,可繼承其他類,適合多個線程處理同一個資源的情況,但與此同時代碼較復(fù)雜,訪問當(dāng)前線程時要使用Thread.currentThread()方法。

而繼承Thread實(shí)現(xiàn)的線程類在訪問當(dāng)前線程時只使用this即可訪問,但因?yàn)槔^承了Thread類,不能再繼承其他類

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的java线程方法_Java线程的三种方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。