ホームページ  >  記事  >  Java  >  【Javaの基礎】スレッドインスタンス

【Javaの基礎】スレッドインスタンス

黄舟
黄舟オリジナル
2017-02-07 10:58:081464ブラウズ

今日、友人がバックグラウンドでの Java マルチスレッドの概念について質問しました。編集者は、基本的なスレッドの概念を習得することによってのみ、マルチスレッドをより深く理解できると考えています。平たく言えば、複数の while ループが実行されることです。複数のものが存在する場合、実際の使用中に複数のスレッドが同じデータ ブロックを操作する可能性があり、マルチスレッドの注意の問題が発生します。まず、スレッドの基本概念と簡単なコード実装を理解しましょう

Java スレッド学習の古典的な例 - リーダーとライターのデモンストレーション

Java スレッド学習 - リーダーとライターの最も古典的な例では、主なスレッド関連の知識は次のように使用されます:

- スレッドの開始と実行

- スレッドのスリープ (スリープ)

- データ オブジェクトのロック (同期)

- データ オブジェクトの待機と解放 (待機して通知)

プログラムの実装:

- ObjectData データ クラス オブジェクト, through synchronized このキーワードはロックを実装し、スレッドのリーダーとライターで使用されます。

-ConsumerThread コンシューマ スレッドは、データ オブジェクト内のカウント値を読み取った後、プロデューサー スレッドに通知します。

-ProductThread プロデューサ スレッドは、データ オブジェクト内のカウント値を操作し、毎回 1 ずつインクリメントして、コンシューマに通知しますスレッド

クラス 構造図は次のとおりです:

【Javaの基礎】スレッドインスタンス

コード実装

コンシューマ読み取りスレッド

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) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。