Java で新しいスレッドを開始する
-
Java で
Thread
クラスを拡張してスレッドを作成する -
Java で
Runnable
インターフェースを実装してスレッドを作成する -
Java の
スレッド
オブジェクトでスレッドを作成する - Java で匿名クラスを使用してスレッドを作成する
- Java のラムダ関数を使用してスレッドを作成する
-
Java の
Executors
クラスを使用してスレッドを作成する
このチュートリアルでは、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.