首頁 > Java > Java基礎 > java如何創建線程

java如何創建線程

發布: 2019-12-26 14:11:37
原創
5518 人瀏覽過

java如何創建線程

Java使用Thread類別代表線程,所有的線程物件都必須是Thread類別或其子類別的實例。 Java可以用三種方式來建立線程,如下所示:

1)繼承Thread類別建立線程

#2)實作Runnable介面建立執行緒

3)使用Callable和Future創建線程

下面讓我們分別來看看這三種創建線程的方法。

繼承Thread類別建立執行緒步驟如下:

1】d定義Thread類別的子類,並重寫該類別的run()方法,該方法的方法體就是執行緒需要完成的任務,run()方法也稱為執行緒執行體。

2】創建Thread子類別的實例,也就是創建了線程物件

3】啟動線程,也就是呼叫線程的start()方法

範例:

public class MyThread extends Thread{//继承Thread类
  public void run(){
  //重写run方法
  }
}
public class Main {
  public static void main(String[] args){
    new MyThread().start();//创建并启动线程
  }
}
登入後複製

實作Runnable介面建立執行緒步驟如下:

1】定義Runnable介面的實作類,一樣要重寫run()方法,這個run()方法和Thread中的run()方法一樣是線程的執行體

2】創建Runnable實現類別的實例,並用這個實例作為Thread的target來創建Thread對象,這個Thread對象才是真正的線程物件

3】第三部依然是透過呼叫執行緒物件的start()方法來啟動執行緒

#範例:

public class MyThread2 implements Runnable {//实现Runnable接口
  public void run(){
  //重写run方法
  }
}
public class Main {
  public static void main(String[] args){
    //创建并启动线程
    MyThread2 myThread=new MyThread2();
    Thread thread=new Thread(myThread);
    thread().start();
    //或者    new Thread(new MyThread2()).start();
  }
}
登入後複製

使用Callable和Future建立執行緒步驟如下:

1】建立Callable介面的實作類,並實作call()方法,然後建立該實作類別的實例(從java8開始可以直接使用Lambda表達式建立Callable物件)。

2】使用FutureTask類別來包裝Callable對象,FutureTask物件封裝了Callable物件的call()方法的傳回值

3】使用FutureTask物件作為Thread物件的target建立並啟動執行緒(因為FutureTask實作了Runnable介面)

4】呼叫FutureTask物件的get()方法來取得子執行緒執行結束後的回傳值

範例:

public class Main {
  public static void main(String[] args){
   MyThread3 th=new MyThread3();
   //使用Lambda表达式创建Callable对象
     //使用FutureTask类来包装Callable对象
   FutureTask<Integer> future=new FutureTask<Integer>(
    (Callable<Integer>)()->{
      return 5;
    }
    );
   new Thread(task,"有返回值的线程").start();//实质上还是以Callable对象来创建并启动线程
    try{
    System.out.println("子线程的返回值:"+future.get());//get()方法会阻塞,直到子线程执行结束才返回
    }catch(Exception e){
    ex.printStackTrace();
   }
  }
}
登入後複製

更多java知識請關注java基礎教學欄。

以上是java如何創建線程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板