Javaでのマルチスレッド–例を使って学ぶ
公開: 2022-06-23Javaは、マルチスレッドプログラムをサポートするプログラミング言語です。 マルチスレッドプログラムは、同時に実行される2つ以上の部分(スレッド)に対応し、さまざまなタスクを処理して、最適なCPU使用率を実現します。 マルチスレッドは、マルチタスクの拡張です。 マルチタスクは、複数のプロセスが中央処理装置のような共通の処理リソースを共有する機能として定義できます。
マルチスレッドは、マルチタスクの概念をさまざまなアプリケーションに分岐させ、定義された操作をより小さな個々のスレッドに分割できます。
これらの各スレッドは、1つのスレッドの例外が他のスレッドのパフォーマンスに影響を与えないように、異なる実行パスで同時に独立して実行されます。
世界のトップ大学からオンラインでソフトウェア開発コースを学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを迅速に追跡します。
Javaのマルチスレッドとは何ですか?
Javaのマルチスレッドは、CPU時間を最大化するために複数のスレッドが同時に実行される場所です。
スレッドのライフサイクル
スレッドには、ライフサイクルのさまざまな段階があります。 それらは次のとおりです。
- 新規:スレッドは、新しいスレッドとしてライフサイクルを開始します。 プログラムがスレッドを実行するまで、この新生段階に留まります。
- 実行可能:プログラムが開始すると、生まれたスレッドは実行可能ステージに入ります。 スレッドはこの段階でタスクの実行を開始します。
- 待機中:これは、スレッドが別のスレッドがタスクを完了するのを待機する移行段階です。 待機ステージのスレッドは、他のスレッドからシグナルを受信した後、実行可能ステージに切り替わります。
- 時限待機:これは、実行可能なスレッドが特定の時間間隔で入ることができる段階です。 このステージのスレッドは、特定の時間間隔の終わりに実行可能ステージに戻ります。
- Dead:これはスレッドのライフサイクルの最終段階です。 スレッドは、タスクを完了した後、この段階に入ります。
Javaでのマルチスレッドの利点
- Javaのスレッドは独立しているため、Javaマルチスレッドはユーザーをブロックせず、ユーザーは多くの操作を同時に実行できます。
- Javaのマルチスレッドは複数の操作を可能にするため、時間の節約と効率が向上します。
- プログラムの一部が傍受されても、プログラムは継続的に実行できます。
- 複数のプロセスを使用する従来の並列プログラムと比較して、パフォーマンスが向上します。
- CPU時間を最大限に活用する効率的なプログラムの作成。
- 複雑なアプリケーションの応答時間を大幅に改善します。
- 従来の並列プログラムと比較して、必要なリソースが少なくて済みます。
スレッドの優先順位
オペレーティングシステムは、スレッドの優先度に基づいてスレッドの実行スケジュールを決定します。 スレッドの優先度は、その定数の値に基づいて決定されます。
- 定数1は最小優先度を取得します(MIN_PRIORITY)
- 定数5は通常の優先度を取得します(NORM_PRIORITY)
- 定数10が最大優先度(MAX_PRIORITY)を取得します
ソフトウェアエンジニアリングに関する人気のコースと記事
人気のプログラム | |||
ソフトウェア開発におけるエグゼクティブPGプログラム-IIITB | ブロックチェーン証明書プログラム-PURDUE | サイバーセキュリティ証明書プログラム-PURDUE | コンピュータサイエンスのMSC-IIITB |
その他の人気記事 | |||
米国のクラウドエンジニアの給与2021-22 | 米国でのAWSソリューションアーキテクトの給与 | 米国のバックエンド開発者の給与 | 米国のフロントエンド開発者の給与 |
米国のWeb開発者の給与 | 2022年のスクラムマスターインタビューの質問 | 2022年にサイバーセキュリティのキャリアを開始するにはどうすればよいですか? | 工学部の学生のための米国でのキャリアオプション |
Javaでスレッドを作成するにはどうすればよいですか?
スレッドは、Javaで次の2つの方法で作成できます。
- スレッドクラスの拡張
- 実行可能なインターフェースの実装
スレッドクラスを拡張してスレッドを作成する
スレッドクラスのいくつかのメソッドとその関数を以下に示します。
- getName():スレッド名を取得するため
- getPriority():スレッドの優先度を取得します
- はAlive()です:スレッドが実行されているかどうかを確認します
- join():スレッドの終了を待つ
- run():スレッドのエントリのポイント
- sleep():特定の時間枠でスレッドを一時停止します。
- start():run()メソッドを介してスレッドをアクティブ化します。
ステップ1 :スレッドクラスで指定されたrun()メソッドをオーバーライドします。 これはスレッドのエントリポイントとして機能し、プログラムロジック全体を4thisに含める必要があります。
run()メソッドの構文は次のとおりです。
public void run()
ステップ2:構文がvoid start()であるstart()メソッドによってスレッドオブジェクトを開始します。
Javaのマルチスレッドプログラムの例を次に示します。
例1:
クラスMultithreadingDemoはThread{を拡張します
public void run(){
System.out.println( "スレッドが実行されています。");
}
public static void main(String args []){
MultithreadingDemo obj = new MultithreadingDemo();
obj.start();
}
}
上記のプログラムの出力は次のようになります。
スレッドが実行されています。
例2:
クラスCountはスレッドを拡張します
{{
カウント()
{{
super( "私のスレッドが拡張されています");
System.out.println("私のスレッドが作成されました"+ this);
始める();
}
public void run()
{{
試す
{{
for(int i = 0; i <10; i ++)
{{
System.out.println("カウントの印刷"+ i);
Thread.sleep(1000);
}
}
catch(InterruptedException e)
{{
System.out.println( "スレッドが中断されました");
}
System.out.println( "私のスレッドは終了しました");
}
}
クラスExtendingExample
{{
public static void main(String args [])
{{
カウントcnt=new Count();
試す
{{
while(cnt.isAlive())
{{
System.out.println( "メインスレッドは子スレッドが存続するまで存続します");
Thread.sleep(1500);
}
}
catch(InterruptedException e)
{{
System.out.println( "メインスレッドが中断されました");
}
System.out.println( "メインスレッドの実行が終了しました");
}
}
上記のプログラムの出力は次のようになります
私のスレッドはcreatedThread[私の実行可能なスレッド、5、メイン]
メインスレッドは、子スレッドが存続するまで存続します
カウント0の印刷
カウント1の印刷
メインスレッドは、子スレッドが存続するまで存続します
カウント2の印刷
メインスレッドは、子スレッドが存続するまで存続します
カウント3の印刷
カウント4の印刷
メインスレッドは、子スレッドが存続するまで存続します
カウント5の印刷
メインスレッドは、子スレッドが存続するまで存続します
カウントの印刷6
カウントの印刷7
メインスレッドは、子スレッドが存続するまで存続します
カウント8の印刷
メインスレッドは、子スレッドが存続するまで存続します
カウント9の印刷
スレッドの実行が終了しました
メインスレッドの実行が終了します
実行可能なインターフェイスを実装してスレッドを作成する
この方法を使用する際に従うべき3つの重要なステップがあります。
ステップ1 :run()メソッドは、実行可能なインターフェイスによって実装する必要があります。 このrun()メソッドは、スレッドのエントリポイントとして機能し、プログラムロジック全体を含む必要があります。
run()メソッドの構文は次のとおりです。
public void run()
ステップ2:スレッドオブジェクトは、以下に示すコンストラクターを使用してアクティブ化する必要があります。
Thread(Runnable threadObj、String threadName);
ここで、threadObjは実行可能なインターフェースを実装するクラスとして機能し、スレッド名は新しいスレッドに付けられた名前です。
ステップ3:スレッドオブジェクトを作成した後、run()メソッドを実行するstart()メソッドによって開始できます。
start()メソッドの構文は次のとおりです。
void start();
実行可能なインターフェースを実装してスレッドを作成する例は、ここにあります。
Javaマルチスレッドとソフトウェア開発の詳細については、upGradに関連してIIITバンガロールが提供するソフトウェア開発のエグゼクティブポストグラデュエイトプログラムに登録することをお勧めします。
ソフトウェア開発のエグゼクティブPGプログラムは、業界関連のケーススタディやプロジェクトを通じて、働く専門家がキャリアを大きく飛躍させるのに役立つように設計された13か月のオンラインプログラムです。 このプログラムには、業界の専門家による10を超えるライブセッションも含まれており、候補者の学習を促進します。
このプログラムには、候補者が実践的な経験と適切な業界への露出を持ち、学習を関連性のある実用的なものにするのに役立つ業界プロジェクトが含まれています。 プログラムの完了は、切望されたIIITB認定と卒業生のステータスで候補者に報酬を与えます。
このプログラムには、upGradによる360度の配置サポートが付属しており、世界中の40,000人を超える有料学習者に影響を与え、状況をさらに改善しています。 upGradには、85か国以上からの学習者ベースがあり、候補者にグローバルなピアネットワークを提供する貴重な機会を提供しています。
Javaのマルチタスクとマルチスレッドの違いは何ですか?
マルチタスクは、多くのタスクを同時に実行できるプロセスであり、マルチスレッドは、複数のスレッドを同時に実行し、各スレッドが異なるタスクを実行するプロセスです。
多重継承はJavaでサポートされていますか?
プログラミング言語Javaは、クラスが複数のインターフェースを実装するプロセスである多重継承をサポートしています。 クラスは、インターフェースでメソッドのさまざまな実装(デフォルトまたは静的)を持つことができます。 Javaでの多重継承は、C ++言語とは異なり、クラスではなくインターフェースでのみ実装できます。
マルチスレッドはJavaのパフォーマンスを向上させることができますか?
マルチスレッドは、複数のCPUが同じ問題に対処できるようにすることで、Javaのパフォーマンスを向上させます。 これはプロセスをスピードアップするだけでなく、効率的な問題解決にも役立ちます。