1. 程式人生 > 實用技巧 >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); } }