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); } }