Java多線程之 對同一個值操作


1.首先synchronized(對象 --> 一定是一個類,不可以用基本數據類型)

2.目標是對Integer count操作,用count當鎖有問題,因為count是包裝類型,存放的是地址,count不斷變化則地址不斷變化,對象不斷變化

所以使用Object o 當作鎖,因為不變化

3.如果不加while(true){} => 不能達到並發的效果

如果加while true + break => 線程輪流排隊拿鎖o

4. 此時syn代碼塊和syn方法起到相同效果

public class FourThread extends Thread{
    private static Integer count = 0;
    private Object o = new Object();
    static int a = 0;

    @Override
    public void run(){
        while (true){
            synchronized (o){ // 1.syn代碼塊
                count++;
                System.out.println(Thread.currentThread().getName()+"===="+count);
                // 或者2. syn的add方法{count++},取代代碼塊
                a++;
                break;
            }
        }
    }

    public static void main (String[] args) throws InterruptedException {
        for(int i=0;i<100;i++){
            new FourThread().start();
        }

        while(a<100){
            Thread.sleep(100);
        }
        System.out.println("count="+count);

    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM