zoukankan      html  css  js  c++  java
  • 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);
    
        }
    }
  • 相关阅读:
    第二阶段冲刺第一天
    第一次团队绩效评估
    其他团队对本团队评价的总结
    对其他团队的评价
    团队博客的检查结果
    站立会议第十天
    站立会议第九天
    站立会议第八天
    站立会议第七天
    团队站立会议10
  • 原文地址:https://www.cnblogs.com/sabertobih/p/13632949.html
Copyright © 2011-2022 走看看