Java 中的 Runnable 與 Callable 介面
Mohammad Irfan
2023年10月12日
Java
Java Runnable
Java Callable
-
Java 中的
Runnable介面 -
Java 中的
Runnable介面示例 -
Java 中的
Callable介面 -
Java 中的
Callable介面示例 -
Java 中的
RunnableVSCallable介面
本教程通過 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 中建立執行緒。 | 它不能用於建立執行緒。 |
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe