Je suis novice en matière de threads et d'apprentissage. Pourquoi cette donnée est-elle en course? Je sais comment le faire en utilisant la méthode Synchronized(){}
mais pas avec le modificateur.Pourquoi les données de ce fil de course?
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);
}
}
double possible [Apprendre à utiliser les threads qui empêchent les données conditions de course] (http: // stackoverflow.com/questions/10309015/learning-to-use-threads-that-prevent-data-race-conditions) – Gray
C'est le même problème mec. Vous synchronisez sur un objet différent à chaque fois. Cette fois, vous synchronisez sur la méthode qui synchronise sur chacun des différents objets 'SyncMethodDataRace'. Vous devez synchroniser sur un seul objet, laissez-moi répondre à votre autre question. – Gray
Lorsque vous synchronisez la méthode, cela revient à mettre le contenu de la méthode dans un bloc 'synchronized (this)'. – jpm