Le code suivant est supposé empêcher Data Racing en utilisant la méthode synchronisée sur common. Mais pour une raison quelconque, la sortie est toujours 19915-19980. Ne devrait-il pas être 20000 si ce n'était pas la course de données?Apprendre à utiliser des threads qui empêchent les conditions de course de données
public class SyncVarDataRace extends Thread {
private static int common = 0;
public void run(){
synchronized((Integer)common){
int local = common;
local+=1;
common = local;
}
}
public static void main(String[] args) throws InterruptedException {
SyncVarDataRace[] allThreads = new SyncVarDataRace[20000];
for(int i = 0; i < allThreads.length; i++){
allThreads[i] = new SyncVarDataRace();
}
for(SyncVarDataRace d: allThreads){
d.start();
}
for(SyncVarDataRace d: allThreads){
d.join();
}
System.out.println(common);
}
}