Java で新しいスレッドを開始する

Mohammad Irfan 2023年10月12日
  1. Java で Thread クラスを拡張してスレッドを作成する
  2. Java で Runnable インターフェースを実装してスレッドを作成する
  3. Java のスレッドオブジェクトでスレッドを作成する
  4. Java で匿名クラスを使用してスレッドを作成する
  5. Java のラムダ関数を使用してスレッドを作成する
  6. Java の Executors クラスを使用してスレッドを作成する
Java で新しいスレッドを開始する

このチュートリアルでは、Java で新しいスレッドを開始する方法を紹介します。

スレッドは、リアルタイムで実行され、CPU 使用率を最大化するプログラム/プロセスの最小単位です。

Java はスレッドの概念をサポートしており、マルチスレッドアプリケーションを作成するためのスレッドを作成できます。この記事では、Java で新しいスレッドを作成する方法を学びます。

Java で新しいスレッドを作成するには、Thread クラスまたは Runnable インターフェイスのいずれかを使用できます。いくつかの例を見てみましょう。

Java で Thread クラスを拡張してスレッドを作成する

Java では、Thread は新しいスレッドを作成するために使用されるクラスであり、いくつかのユーティリティメソッドを提供します。この例では、Thread クラスを拡張し、start()メソッドを使用して開始することで使用しました。start() メソッドは新しいスレッドを開始します。run() メソッドは、新しく作成されたスレッドによってタスクを実行するために使用されます。スレッドはこのメソッドを自動的に実行します。以下の例を参照してください。

public class SimpleTesting extends Thread {
  public static void main(String[] args) {
    SimpleTesting st = new SimpleTesting();
    st.start();
  }
  public void run() {
    try {
      System.out.println("New Thread Start");
      Thread.sleep(1000);
      System.out.println("Thread sleep for 1 second.");
    } catch (InterruptedException e) {
      System.out.println(e);
    }
  }
}

出力:

New Thread Start
Thread sleep for 1 second.

Java で Runnable インターフェースを実装してスレッドを作成する

Runnable インターフェイスを使用して新しいスレッドを作成できますが、Thread クラスによって提供されるような機能は提供されません。このインターフェイスは、タスクの実行に使用できる run()メソッドを提供します。以下の例を参照してください。

public class SimpleTesting implements Runnable {
  public static void main(String[] args) {
    SimpleTesting st = new SimpleTesting();
    Thread one = new Thread(st);
    one.start();
  }
  public void run() {
    try {
      System.out.println("New Thread Start");
      Thread.sleep(1000);
      System.out.println("Thread sleep for 1 second.");
    } catch (InterruptedException e) {
      System.out.println(e);
    }
  }
}

出力:

New Thread Start
Thread sleep for 1 second.

Java のスレッドオブジェクトでスレッドを作成する

Thread オブジェクトと start() メソッドを使用して新しいスレッドを直接作成できますが、run() メソッドの実装が提供されていないため、このスレッドはタスクを実行しません。getState()getName() などの組み込みメソッドを使用してスレッド情報を取得できます。以下の例を参照してください。

public class SimpleTesting {
  public static void main(String[] args) {
    Thread one = new Thread("New Thread");
    System.out.println("Thread state : " + one.getState());
    one.start();
    System.out.println("Thread state : " + one.getState());
    System.out.println("Thread Name : " + one.getName());
    System.out.println("Thread state : " + one.getState());
  }
}

出力:

Thread state : NEW
Thread state : RUNNABLE
Thread Name : New Thread
Thread state : TERMINATED

Java で匿名クラスを使用してスレッドを作成する

これは、新しいスレッドを作成するための新しい方法ではありません。Runnable クラスを使用して匿名クラスを使用し、それを Thread コンストラクターに渡して、スレッドを開始しました。以下の例を参照してください。

public class SimpleTesting {
  public static void main(String[] args) {
    Thread t1 = new Thread(new Runnable() {
      public void run() {
        try {
          System.out.println("New Thread Start");
          Thread.sleep(1000);
          System.out.println("Thread sleep for 1 second.");
        } catch (InterruptedException e) {
          System.out.println(e);
        }
      }
    });
    t1.start();
  }
}

出力:

New Thread Start
Thread sleep for 1 second.

Java のラムダ関数を使用してスレッドを作成する

ラムダ関数機能が Java 8 バージョンに追加され、Java で匿名クラスを置き換えるために使用できるようになりました。ここでは、ラムダ関数を使用して新しいスレッドを作成しました。これは、スレッドを作成するためのコンパクトで短い方法です。以下の例を参照してください。

public class SimpleTesting {
  public static void main(String[] args) throws InterruptedException {
    new Thread(() -> {
      try {
        System.out.println("New Thread Start");
        Thread.sleep(1000);
        System.out.println("Thread sleep for 1 second.");
      } catch (InterruptedException e) {
        System.out.println(e);
      }
    }) {
      { start(); }
    }.join();
  }
}

出力:

New Thread Start
Thread sleep for 1 second.

Java の Executors クラスを使用してスレッドを作成する

Executors は、Java 同時実行パッケージに属するクラスであり、マルチスレッドアプリケーションの作成に使用できます。したがって、これを使用して新しいスレッドを作成することもできます。newSingleThreadExecutor() メソッドは、新しいスレッドを初期化し、submit() 関数によって実行されます。以下の例を参照してください。

import java.util.concurrent.Executors;
public class SimpleTesting {
  public static void main(String[] args) throws InterruptedException {
    Executors.newSingleThreadExecutor().submit(() -> {
      try {
        System.out.println("New Thread Start");
        Thread.sleep(1000);
        System.out.println("Thread sleep for 1 second.");
      } catch (InterruptedException e) {
        System.out.println(e);
      }
    });
  }
}

出力:

New Thread Start
Thread sleep for 1 second.

関連記事 - Java Threading