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