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