天天看點

多線程之線程安全問題

線程安全

講到線程安全 enn。。。。怎麼說呢 這是一個很複雜的東西 --算了直接上代碼吧

文章中 有些我也是複制的不過我不像别人看都不看 我都看過一邊覺得對的我才會複制

public class SecurityThead {

    private static int num=0;

    //10個線程,使用線程工具類
    private static CountDownLatch countDownLatch = new CountDownLatch(10);

    private static void addNum(){
        num++;
    }

    public static void main(String[] args) {
        for (int i=0;i<10;i++){
            new Thread(()->{
                for(int j=0;j<100;j++){
                    addNum();
                    try {
                        Thread.sleep(10L);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                countDownLatch.countDown();
            }).start();
        }

        while(true){
            if(countDownLatch.getCount()==0){
                System.out.println(num);
                break;
            }
        }



    }


           

CountDownLatch是通過一個計數器來實作的,計數器的初始值為線程的數量。每當一個線程完成了自己的任務後,計數器的值就會減1。當計數器值到達0時,它表示所有的線程已經完成了任務,然後在閉鎖上等待的線程就可以恢複執行任務。

多線程之線程安全問題

輸出結果不是1000欸 為什麼呢

多個線程執行時,CPU對線程的排程是随機的,我們不知道目前程式被執行到哪步就切換到了下一個線程,是以就會發生線程不安全的情況

有不對的地方歡迎指出來

喜歡的話請點個關注