Javaでスレッドを使用する方法
Java で Thread を使用する方法、具体的なコード例
- はじめに
Java では、マルチスレッド プログラミングはプログラムの効率を向上させる強力な方法です。そして同時実行性。 Thread クラスは、スレッドの作成と管理に使用される Java のコア クラスです。この記事では、Thread クラスの使用法を詳しく紹介し、いくつかの具体的なコード例を示します。 - Thread の作成
Thread オブジェクトは、Thread クラスの継承と Runnable インターフェイスの実装の 2 つの方法で作成できます。 Thread クラスを継承するのは簡単な方法ですが、Java は単一継承のみをサポートしているため、この方法ではコードのスケーラビリティが制限されます。 Java は複数のインターフェイスの実装をサポートしているため、Runnable インターフェイスを実装すると、この問題を回避できます。
次は、2 つのメソッドを使用してスレッドを作成するコード例です。
// 继承Thread类 class MyThread extends Thread { public void run(){ // 线程执行的代码 } } // 实现Runnable接口 class MyRunnable implements Runnable { public void run(){ // 线程执行的代码 } } // 创建线程并启动 public static void main(String[] args){ // 创建继承Thread类的线程 MyThread thread1 = new MyThread(); thread1.start(); // 创建实现Runnable接口的线程 MyRunnable runnable = new MyRunnable(); Thread thread2 = new Thread(runnable); thread2.start(); }
上記のコードでは、Thread クラスを継承して作成されたスレッドは、start メソッドを直接呼び出します。 Runnable インターフェイスを実装することによって作成されたスレッドは、最初に Thread オブジェクトを作成し、Runnable インターフェイスを実装するオブジェクトをパラメータとして Thread コンストラクターに渡してから、Thread オブジェクトの start メソッドを呼び出して開始する必要があります。スレッド。
- スレッドのライフ サイクル
スレッドは作成後に複数の状態を経ます。これらの状態はスレッドのライフ サイクルと呼ばれます。一般的なスレッドの状態は、新規、実行可能、実行中、ブロック、終了です。
以下は、スレッドのライフサイクルを示す簡単な例です:
class MyThread extends Thread { public void run(){ System.out.println("线程执行中"); try { Thread.sleep(1000); // 线程等待1秒 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程执行结束"); } } public static void main(String[] args){ MyThread thread = new MyThread(); System.out.println("线程状态:" + thread.getState()); // 输出线程状态为New thread.start(); System.out.println("线程状态:" + thread.getState()); // 输出线程状态为Runnable // 等待线程执行结束 try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程状态:" + thread.getState()); // 输出线程状态为Terminated }
上記のコードでは、新しいスレッドが作成されて開始された後、スレッドのステータスは次のようになります。最初の出力は New で、その後の出力ステータスは Runnable です。 thread.join() メソッドを呼び出し、スレッドの実行が終了するのを待った後、最終的な出力ステータスは Terminated になります。
- スレッドの同期と相互排他
マルチスレッド プログラミングでは、スレッドの同期と相互排他は非常に重要な概念です。複数のスレッドが共有リソースに同時にアクセスする場合、競合状態やデータの不整合を避けるために、適切な同期措置を講じる必要があります。
Java は、スレッドの同期と相互排他を実現するために、synchronized キーワードや Lock インターフェイスなどのメカニズムを提供します。以下は、スレッド同期に synchronized キーワードを使用する例です。
class Counter { private int count = 0; // 线程安全的方法 public synchronized void increment(){ count++; } public int getCount(){ return count; } } public static void main(String[] args){ Counter counter = new Counter(); Runnable runnable = () -> { for(int i=0; i<10000; i++){ counter.increment(); } }; Thread thread1 = new Thread(runnable); Thread thread2 = new Thread(runnable); thread1.start(); thread2.start(); try { thread1.join(); thread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("计数器的值:" + counter.getCount()); // 输出:20000 }
上記のコード例では、スレッド セーフな Counter クラスが定義されており、increment メソッドは synchronized キーワードを使用して共有データを同期します。 2 つのスレッドが同時に Counter オブジェクトを呼び出し、各スレッドがカウントに対して 10,000 回のインクリメント操作を実行し、最終的に正しい結果 20,000 を出力しました。
- スレッドの中断
Java には、実行中のスレッドを中断するメカニズムが用意されており、Thread クラスの中断メソッドを呼び出して、中断信号を送信できます。割り込みを受けたスレッドは、isInterrupted メソッドを呼び出すことで割り込み信号を受信したかどうかを判断し、必要に応じて適切なアクションを実行できます。
以下は、スレッドを中断する方法を示すサンプル コードです:
class MyThread extends Thread { public void run(){ while(!isInterrupted()){ System.out.println("线程运行中"); try { Thread.sleep(1000); // 线程等待1秒 } catch (InterruptedException e) { e.printStackTrace(); break; } } System.out.println("线程中断"); } } public static void main(String[] args){ MyThread thread = new MyThread(); thread.start(); try { Thread.sleep(5000); // 主线程等待5秒 } catch (InterruptedException e) { e.printStackTrace(); } thread.interrupt(); // 中断线程 }
上記のコードでは、新しいスレッドが作成されて開始された後、メイン スレッドは 5 分間待機します。秒 その後、子スレッドが中断されます。
概要:
この記事では、Java での Thread クラスの使用法を紹介し、いくつかの具体的なコード例を示します。 Thread クラスを継承するか Runnable インターフェイスを実装することでスレッドを作成し、start メソッドを呼び出してスレッドを開始できます。スレッドのライフサイクルと、スレッドの同期と相互排除の概念を理解することは、堅牢なマルチスレッド プログラムを作成するために非常に重要です。同時に、スレッドを中断する方法を理解することも、マルチスレッド プログラミングにおける重要な知識ポイントです。これらの内容をマスターすると、開発者がマルチスレッド プログラミングを使用してプログラムの効率と同時実行性を向上させるのに役立ちます。
以上がJavaでスレッドを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。
