Java 中的 Runnable 與 Callable 介面
Mohammad Irfan
2023年10月12日
-
Java 中的
Runnable
介面 -
Java 中的
Runnable
介面示例 -
Java 中的
Callable
介面 -
Java 中的
Callable
介面示例 -
Java 中的
Runnable
VSCallable
介面
本教程通過 Java 中的示例介紹了 Runnable
和 Callable
介面之間的區別。
Java 中的 Runnable
介面
Runnable
是用於在 Java 中建立和執行執行緒的介面。它只有一個抽象方法 run()
,也稱為 Functional
介面。
你可以在下面看到 Runnable
介面的簽名及其 SAM 方法。
@FunctionalInterface public interface Runnable
void run() // Single Abstract Method
Java 中的 Runnable
介面示例
每個想要建立和執行執行緒的類都必須實現 Runnable
介面或擴充套件 Thread
類。
Runnable
介面提供了一個 run()
方法,該方法必須在基類中被覆蓋。該方法由 start()
方法隱式執行。請參見下面的示例。
public class SimpleTesting implements Runnable {
public static void main(String[] args) {
new Thread(new SimpleTesting()).start();
}
@Override
public void run() {
System.out.println("Running a thread");
}
}
輸出:
Running a thread
Java 中的 Callable
介面
Callable
是一個介面,類似於 Runnable
介面。它還包含一個抽象方法,call()
。
這個介面是為那些例項可能被另一個執行緒執行的類設計的。Callable
介面和方法的簽名如下:
Executors
類包含從其他常見形式轉換為 Callable
類的實用方法。
@FunctionalInterface public interface Callable<V>
V call() throws Exception
Java 中的 Callable
介面示例
我們實現了 Callable
介面並覆蓋了它的 call()
方法。我們可以為 call()
方法獲取任何物件。
請參見下面的示例。
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class SimpleTesting implements Callable<Integer> {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executorService = Executors.newSingleThreadExecutor();
SimpleTesting st = new SimpleTesting();
Future<Integer> future = executorService.submit(st);
int result = future.get().intValue();
System.out.println("product " + result);
}
@Override
public Integer call() throws Exception {
int product = 23 * 12;
return product;
}
}
輸出:
product 276
Java 中的 Runnable
VS Callable
介面
下表包含一些理解 Java 的 Runnable
和 Callable
介面的要點。
Runnable |
Callable |
---|---|
實現類必須相應地重寫它的 run() 方法。 |
實現類必須相應地覆蓋其 call() 方法。 |
run() 方法的返回型別是 void,因此不會向呼叫者返回任何內容。 |
call() 方法的返回型別是一個物件。它可以是字串、整數等。 |
run() 方法不會丟擲任何異常。 |
call() 方法可以在執行期間丟擲異常。 |
它可用於在 Java 中建立執行緒。 | 它不能用於建立執行緒。 |