Java中Runnable和Callable介面的區別
Runnable和Callable都是函式式介面。實現這些介面的類旨在由另一個執行緒執行。
執行緒可以使用Runnable啟動,並且有兩種啟動新執行緒的方法:一種是透過繼承Thread類,另一種是實現Runnable介面。
Thread類沒有Callable的建構函式,因此我們應該使用ExecutorService類來執行執行緒。
| 序號 | 關鍵 | Runnable | Callable |
|---|---|---|---|
| 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;
}
}
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP