Je rencontre des problèmes avec Synchronisé ne se comporte pas la façon dont je pense, j'ai essayé d'utiliser mot-clé volatile aussi:java émission synchronisée
Shared Object:
public class ThreadValue {
private String caller;
private String value;
public ThreadValue(String caller, String value) {
this.value = value;
this.caller = caller;
}
public synchronized String getValue() {
return this.caller + " " + this.value;
}
public synchronized void setValue(String caller, String value) {
this.caller = caller;
this.value = value;
}
}
Discussion 1:
class CongoThread implements Runnable {
private ThreadValue v;
public CongoThread(ThreadValue v) {
this.v = v;
}
public void run() {
for (int i = 0; i 10; i++) {
v.setValue("congo", "cool");
v.getValue();
}
}
}
Fil 2:
class LibyaThread implements Runnable {
private ThreadValue v;
public LibyaThread(ThreadValue v) {
this.v = v;
}
public void run() {
for (int i = 0; i 10; i++) {
v.setValue("libya", "awesome");
System.out.println("In Libya Thread " + v.getValue());
}
}
}
appel Classe:
class TwoThreadsTest {
public static void main (String args[]) {
ThreadValue v = new ThreadValue("", "");
Thread congo = new Thread(new CongoThread(v));
Thread libya = new Thread(new LibyaThread(v));
libya.start();
congo.start();
}
}
De temps en temps que je reçois "en Libye discussion congo cool" qui ne devrait jamais arriver. Je m'attends seulement à: "En Libye Thread libya génial" "Dans le Congo Thread congo cool"
Je ne m'attends pas à être mélangés.
Dans un programme non trivial, vous voulez probablement cacher même ce niveau de synchronisation. Avoir une méthode comme setValueAndReturnString() qu'il a lui-même synchronisé.Vous ne voulez pas compter sur les appelants qui gèrent le multithreading correctement. – AngerClown
D'accord. Je pensais simplement qu'en fournissant à Mo la version du code qui devrait atteindre le comportement qu'il cherchait, et avec la réponse que les autres ont fournie, cela l'aiderait à comprendre ce qui ne va pas et à mieux comprendre le fonctionnement de la synchronisation. –