Java で Runnable と 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 でスレッドを作成するために使用できます。 | スレッドの作成には使用できません。 |