Java でスレッド ID を取得
-
Java で
Thread.getId()
を使ってスレッド ID を取得する -
Java の
Thread.currentThread().getId()
を使用して現在のスレッドプールの ID を取得する
このチュートリアルでは、Java でスレッドの id を取得する方法を紹介します。また、スレッドプールから現在のスレッドの ID を取得する方法も見ていきます。
Java で Thread.getId()
を使ってスレッド ID を取得する
この例では、スレッドを実行するために run()
メソッドが必要なので、Runnable
クラスを実装した Task
クラスを作成しました。クラス Task
はコンストラクタからスレッド名を受け取り、run()
メソッドはスレッドが実行されたときにそれをコンソールに表示します。
main()
メソッドでは、コンストラクタで 2つの Task
オブジェクトを作成し、その中に task1
と task2
を渡してタスクを割り当てるスレッドオブジェクトを 2つ作成します。
スレッドを実行するために thread1
と thread2
を使って start()
メソッドを呼び出します。最後に、スレッドが実行されたら、thread.getId()
を使って各スレッドの ID を取得し、その ID を long
で返します。
public class GetThreadID {
public static void main(String[] args) {
Task task1 = new Task("Task 1");
Task task2 = new Task("Task 2");
Thread thread1 = new Thread(task1);
Thread thread2 = new Thread(task2);
thread1.start();
thread2.start();
System.out.println("Thread1's ID is: " + thread1.getId());
System.out.println("Thread2's ID is: " + thread2.getId());
}
}
class Task implements Runnable {
private String name;
Task(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println("Executing " + name);
}
}
出力:
Thread1's ID is: 13
Thread2's ID is: 14
Executing Task 2
Executing Task 1
Java の Thread.currentThread().getId()
を使用して現在のスレッドプールの ID を取得する
スレッドプールは、タスクの実行が重くなる場合に有益です。下の例では、Executors.newFixedThreadPool(numberOfThreads)
を使ってスレッドプールを作成しています。プールに入れるスレッドの数を指定することができます。
クラス Task
は run()
メソッドでスレッドの実行を担当します。コンストラクタで渡されたスレッドの名前を設定して取得するシンプルなクラスです。複数のタスクを作成するには、for
ループを使って 5つの task
オブジェクトを作成し、プール内で 5つのスレッドを実行します。
目的は現在実行されているすべてのスレッドの ID を取得することです。これを行うには、現在のスレッドの ID を返す Thread.currentThread().getId()
を使用します。出力では、個々のタスクを実行しているすべてのスレッドの ID を見ることができます。
タスクが完了したら、threadExecutor.shutdown()
を使ってスレッドプールの実行を停止します。スレッドプールが終了するまで待つには、!threadExecutor.isTerminated()
を使用します。
package com.company;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class GetThreadID {
public static void main(String[] args) {
int numberOfThreads = 5;
ExecutorService threadExecutor = Executors.newFixedThreadPool(numberOfThreads);
for (int i = 0; i < 5; i++) {
Task task = new Task("Task " + i);
System.out.println("Created Task: " + task.getName());
threadExecutor.execute(task);
}
threadExecutor.shutdown();
while (!threadExecutor.isTerminated()) {
}
System.out.println("All threads have completed their tasks");
}
}
class Task implements Runnable {
private String name;
Task(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void run() {
System.out.println("Executing: " + name);
System.out.println(name + " is on thread id #" + Thread.currentThread().getId());
}
}
出力:
Created Task: Task 0
Created Task: Task 1
Created Task: Task 2
Created Task: Task 3
Created Task: Task 4
Executing: Task 0
Executing: Task 2
Executing: Task 1
Executing: Task 4
Executing: Task 3
Task 0 is on thread id #13
Task 1 is on thread id #14
Task 4 is on thread id #17
Task 2 is on thread id #15
Task 3 is on thread id #16
All threads have completed their tasks
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn