synchronized 是java中用來同步的方法,詳細的就不介紹了。
synchronized的用法爲:
synchronized(鎖){
代碼塊
}java
這個鎖是什麼呢,我看了不少說法但沒有一個能講清楚的。
經過一段時間的使用後逐漸發現了一些synchronized使用的規律
使用synchronized是爲了防止多個線程同時處理同一個方法,例如在同一時間使用push方法。
問題在於鎖使用的範圍,其實這個我也不是很清楚,我只說一些我瞭解的。
這個「鎖」應該就是一個字符串,對於使用相同「鎖」的synchronized,synchronized中的代碼塊不能同時運行,最簡單的例子就是:
Thread[] t = new Thread[10];
for (int i = 0; i < t.length; i++) {
int finalI = i;
t[i] = new Thread(new Runnable() {
@Override
public void run() {
synchronized ("AAAAA") {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(1000);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
});
t[i].start();
}
for (int i = 0; i <t.length ; i++) {
t[i].join();
}多線程
這和普通的for循環就沒有區別了,由於每一個線程用的是同一個「鎖」--"AAAAA",若是把鎖改爲Thread.currentThread().getName(),就能夠多線程了,由於每個線程的名字不同,因此「鎖」就不同。
因此若是要同步就要保證「鎖」是同樣的,或者說地址同樣。ide