1. 程式人生 > 其它 >synchronized鎖物件

synchronized鎖物件

1:定義執行緒,oneThread
public class OneThread implements Runnable {

    @Override
    public void run() {
        synchronized (this){
            for (int i =0;i< 100;i++){
                System.out.println(Thread.currentThread().getName()+"開始的程式設計號碼為"+i);
                if (i == 10){
                    Thread.yield();
                }
            }
        }
    }
}

2:開始呼叫執行緒
public class TestThread {

    public static void main(String[] args) {
        Thread oneThread = new Thread(new OneThread(),"執行緒ONE");

        Thread twoThread = new Thread(new OneThread(),"執行緒TWO");

        oneThread.start();
        twoThread.start();
    }
}

如此使用,synchronized鎖會失效,因為new的是兩個物件,synchronized獲取的是兩把不同的鎖,所以會導致併發失效

3:修改synchronized是併發訪問有效
public class OneThread implements Runnable {
    @Override
    public void run() {
        synchronized (OneThread.class){
            for (int i =0;i< 100;i++){
                System.out.println(Thread.currentThread().getName()+"開始的程式設計號碼為"+i);
                if (i == 10){
                    Thread.yield();
                }
            }
        }
    }
}