Java中Runnable和Callable介面的區別


Runnable和Callable都是函式式介面。實現這些介面的類旨在由另一個執行緒執行。

執行緒可以使用Runnable啟動,並且有兩種啟動新執行緒的方法:一種是透過繼承Thread類,另一種是實現Runnable介面。

Thread類沒有Callable的建構函式,因此我們應該使用ExecutorService類來執行執行緒。

序號關鍵RunnableCallable
1

它屬於Java.lang
它屬於java.util.concurrent
2
執行緒建立
我們可以透過傳遞Runnable作為引數來建立執行緒。
我們不能透過傳遞Callable作為引數來建立執行緒
3
返回值
Runnable不返回任何內容
Callable可以返回結果
4.
方法
它具有run()方法
它具有call()方法
5
批次執行
它不能用於任務的批次執行
它可以透過呼叫invokeAll()用於任務的批次執行。

Runnable示例

public class RunnableExample implements Runnable {
   public void run() {
      System.out.println("Hello from a Runnable!");
   }
   public static void main(String args[]) {
      (new Thread(new RunnableExample())).start();
   }
}

Callable示例

public class Main {
   public static void main(String args[]) throws InterruptedException, ExecutionException {
      ExecutorService services = Executors.newSingleThreadExecutor();
      Future<?> future = services.submit(new Task());
      System.out.println("In Future Object" + future.get());
   }
}
import java.util.concurrent.Callable;

public class Task implements Callable {

   @Override
   public String call() throws Exception {
      System.out.println("In call");
      String name = "test";
      return name;
   }
}

更新於: 2020年9月9日

5K+瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告