今日、友人がバックグラウンドでの Java マルチスレッドの概念について質問しました。編集者は、基本的なスレッドの概念を習得することによってのみ、マルチスレッドをより深く理解できると考えています。平たく言えば、複数の while ループが実行されることです。複数のものが存在する場合、実際の使用中に複数のスレッドが同じデータ ブロックを操作する可能性があり、マルチスレッドの注意の問題が発生します。まず、スレッドの基本概念と簡単なコード実装を理解しましょう
Java スレッド学習の古典的な例 - リーダーとライターのデモンストレーション
Java スレッド学習 - リーダーとライターの最も古典的な例では、主なスレッド関連の知識は次のように使用されます:
- スレッドの開始と実行
- スレッドのスリープ (スリープ)
- データ オブジェクトのロック (同期)
- データ オブジェクトの待機と解放 (待機して通知)
プログラムの実装:
- ObjectData データ クラス オブジェクト, through synchronized このキーワードはロックを実装し、スレッドのリーダーとライターで使用されます。
-ConsumerThread コンシューマ スレッドは、データ オブジェクト内のカウント値を読み取った後、プロデューサー スレッドに通知します。
-ProductThread プロデューサ スレッドは、データ オブジェクト内のカウント値を操作し、毎回 1 ずつインクリメントして、コンシューマに通知しますスレッド
クラス 構造図は次のとおりです:
コード実装
コンシューマ読み取りスレッド
package com.gloomyfish.jse.thirdteen; public class ConsumerThread extends Thread { private ObjectData data; public ConsumerThread(ObjectData data) { this.data = data; } @Override public void run() { while(true) { try { synchronized (data) { data.wait(); data.read(); data.notify(); } } catch (InterruptedException e) { e.printStackTrace(); } } } }
書き込みスレッド-プロデューサースレッド
package com.gloomyfish.jse.thirdteen; public class ProductThread extends Thread { private ObjectData data; public ProductThread(ObjectData data) { this.data = data; } @Override public void run() { while (true) { try { synchronized (data) { data.write(); Thread.sleep(3000); data.notify(); data.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } } } }
データオブジェクトクラス
package com.gloomyfish.jse.thirdteen; public class ObjectData { private int count; public ObjectData() { count = 0; } public void read() { System.out.println("read count : " + count); System.out.println(); } public void write() { count++; System.out.println("write count : " + count); } }
テストコード:
public static void main(String[] args) { ObjectData data = new ObjectData(); ConsumerThread ct = new ConsumerThread(data); ProductThread pt = new ProductThread(data); ct.start(); pt.start(); }
概要:
サンプルプログラムコード完成 waitとnotifyによるスレッド間のデータ読み書きの同期制御を実現する方法を学びます。 Java の同期キーワード synchronized の使用法とスレッドの使用法を示します。
上記は [Java の基礎] スレッド インスタンスの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。