#Java でのマルチスレッド


マルチスレッド



マルチスレッドは、CPU の使用率を最大化するために、プログラムの 2 つ以上の部分を同時に実行できるようにする Java の機能です.このようなプログラムの各部分はスレッドと呼ばれます.したがって、スレッドはプロセス内の軽量プロセスです.

スレッドは、次の 2 つのメカニズムを使用して作成できます。



1.Extending the Thread class 
2.Implementing the Runnable Interface

Thread クラスの拡張



Thread クラスの拡張によるスレッドの作成
java.lang.Thread クラスを拡張するクラスを作成します.このクラスは、Thread クラスで使用可能な run() メソッドをオーバーライドします.スレッドは、run() メソッド内で活動を開始します.新しいクラスのオブジェクトを作成し、start() メソッドを呼び出してスレッドの実行を開始します. Start() は、Thread オブジェクトで run() メソッドを呼び出します.

例:



class MultithreadingDemo extends Thread {
public void run()
{
試す {
//実行中のスレッドを表示
System.out.println(
"スレッド"+ Thread.currentThread().getId()
+ "実行中");
}
キャッチ (例外 e) {
//例外を投げる
System.out.println("例外がキャッチされました");
}
}
}
//メインクラス
パブリック クラス マルチスレッド {
public static void main(String[] args)
{
int n = 8;//スレッド数
for (int i = 0; i < n; i++) {
MultithreadingDemo オブジェクト
= new MultithreadingDemo();
object.start();
}
}
}

出力

スレッド 15 が実行中です
スレッド 14 が実行中です
スレッド 16 が実行中です
スレッド 12 が実行中です
スレッド 11 が実行中です
スレッド 13 が実行中です
スレッド 18 が実行中です
スレッド 17 が実行中です

実行可能なインターフェースの実装



Runnable Interface 実装によるスレッド作成
java.lang.Runnable インターフェイスを実装し、run() メソッドをオーバーライドする新しいクラスを作成します.次に、Thread オブジェクトをインスタンス化し、このオブジェクトで start() メソッドを呼び出します.

//実装によるスレッド作成の Java コード
//ランナブル インターフェイス
クラス MultithreadingDemo は Runnable を実装します {
public void run()
{
試す {
//実行中のスレッドを表示
System.out.println(
"スレッド"+ Thread.currentThread().getId()
+ "実行中");
}
キャッチ (例外 e) {
//例外を投げる
System.out.println("例外がキャッチされました");
}
}
}

//メインクラス
クラスマルチスレッド{
public static void main(String[] args)
{
int n = 8;//スレッド数
for (int i = 0; i < n; i++) {
スレッド オブジェクト
= new Thread(new MultithreadingDemo());
object.start();
}
}
}
出力

スレッド 13 が実行中です
スレッド 11 が実行中です
スレッド 12 が実行中です
スレッド 15 が実行中です
スレッド 14 が実行中です
スレッド 18 が実行中です
スレッド 17 が実行中です
スレッド 16 が実行中です

スレッド クラスと実行可能なインターフェイス


  • Thread クラスを拡張する場合、Java は多重継承をサポートしていないため、このクラスは他のクラスを拡張できません.ただし、Runnable インターフェースを実装すると、クラスは他の基本クラスを拡張できます.
  • Runnable インターフェースでは利用できない、yield()、interrupt() などの組み込みメソッドを提供するため、Thread クラスを拡張することでスレッドの基本機能を実現できます.
  • runnable を使用すると、複数のスレッド間で共有できるオブジェクトが得られます.