-1
我是新來的線程和學習。爲什麼這個數據競賽?我知道如何使用Synchronized(){}
方法來做到這一點,但不是修改器。這是爲什麼線程數據競賽?
public class SyncMethodDataRace extends Thread {
private static int common = 0;
public synchronized void run(){
int local = common;
local++;
common = local;
}
public static void main(String[] args) throws InterruptedException {
SyncMethodDataRace[] allThreads = new SyncMethodDataRace[20000];
for(int i = 0; i < allThreads.length; i++){
allThreads[i] = new SyncMethodDataRace();
}
for(SyncMethodDataRace d: allThreads){
d.start();
}
for(SyncMethodDataRace d: allThreads){
d.join();
}
System.out.println(common);
}
}
[學習使用,可以防止數據競爭條件線程] HTTP(可能重複:// stackoverflow.com/questions/10309015/learning-to-use-threads-that-prevent-data-race-conditions) – Gray 2012-04-25 04:02:09
這是同一問題的傢伙。您每次都在同一個不同的對象上進行同步。這次您正在同步每個不同'SyncMethodDataRace'對象的方法。您需要同步一個對象,讓我回答您的其他問題。 – Gray 2012-04-25 04:04:14
當你同步這個方法時,它和把這個方法的內容放在'synchronized(this)'塊中一樣。 – jpm 2012-04-25 04:18:24