マルチスレッドリスク

複数のスレッドを使用する場合は、不適切な、コードの実行になりますが、あなたが使用している場合を想像し、今非常に異なっています

:次のコードを見てください
スレッドクラス:

class JymThread1 implements Runnable{
    private int number;

    public void run() {
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName()+":"+getNumber());
    }

    public int getNumber(){
        return number++ ;
    }
}

テストカテゴリ:

public class JymIncrementTest {
    public static void main(String[] args) {
        JymThread1 jymThread = new JymThread1();
        for(int i =0;i<10;i++){
            new Thread(jymThread).start();
        }
    }
}

結果:同じデータを読み込むための2件のスレッドがありますが、結果は明らかに問題がある
ここに画像を挿入説明
のアプローチ:
読み取り変数のクラスを使用してのAtomicIntegerは、原子クラスです
コードを変更した後:

class JymThread1 implements Runnable{
    private AtomicInteger number = new AtomicInteger(0);

    public void run() {
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName()+":"+getNumber());
    }

    public int getNumber(){
         // 先获取,在递增
        return number.getAndIncrement();
    }
}

テストコードと同じ
結果:
ここに画像を挿入説明

悪いの学習時間の不足、あまりにも浅い知識は、ご容赦ください。

人々の10種類が世界であり、1は、1つのバイナリを理解していないで、バイナリを理解することです。

公開された71元の記事 ウォン称賛54 ビュー420 000 +

おすすめ

転載: blog.csdn.net/weixin_43326401/article/details/104102867