按我的理解,我們用「同步聲明」在Java中停止多個線程之間的干擾。
意義{}在java中
現在我想了解expr的在下面的表達式的意義。
同步的(表達式){ 語句 }
因爲看起來象鎖定行爲取決於EXPR對象上。
例如
public class Sync extends Thread {
static int [] arr = {0,1,2};
Object lock = new Object();
public static void main(String[] args){
Sync ob1 = new Sync();
Sync ob2 = new Sync();
ob1.start();
ob2.start();
}
@Override
public void run() {
synchronized (arr) {
for(int i = 0;i < arr.length; ++i){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + arr[i]);
}
}
}
}
現在,在上面的例子中,當我在同步語句中使用「ARR」對象如下(同步(ARR))我得到一致預期的輸出。
線程0 0
線程0 1
線程0 2
線程1 0
線程1 1
線程1 2
當我使用 「鎖定」 但是對象在synchronized語句中(synchronized(lock)),我得到的輸出如下。
線程0 0
線程1 0
線程0 1
線程1 1
線程0 2
線程1 2
不應輸出是相同在這兩種情況下。
感謝,
山塔努