Java で Runnable と Callable のインターフェース

Mohammad Irfan 2023年10月12日
  1. Java の Runnable インターフェイス
  2. Java での Runnable インターフェイスの例
  3. Java の Callable インターフェース
  4. Java での Callable インターフェースの例
  5. Java の Runnable VS Callable インターフェース
Java で Runnable と Callable のインターフェース

このチュートリアルでは、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 でスレッドを作成するために使用できます。 スレッドの作成には使用できません。