Je suis tellement confus au sujet de ce code:Pourquoi System.out.println affecte l'ordre d'exécution dans Java?
public class SynchronizedTest implements Runnable {
private int b = 100;
public synchronized void test01() throws InterruptedException {
b = 1000;
Thread.sleep(5000);
}
public synchronized void test02() throws InterruptedException {
b = 2000;
Thread.sleep(2500);
//System.out.println("test02 end !");
}
@Override
public void run() {
try {
test01();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws InterruptedException {
SynchronizedTest test = new SynchronizedTest();
Thread thread01 = new Thread(test);
thread01.start();
test.test02();
System.out.println(test.b);
}
}
Si je ne pas ajouter ce code System.out.println("test02 end !");
dans le code ci-dessus. Le résultat de l'opération sera imprimé 1000, mais si le code y est ajouté, le résultat de l'opération deviendra "test02 end!" et 2000;
Je ne sais pas pourquoi, comment l'expliquer?
System.out.printline() n'est pas sécurisé par les threads https://stackoverflow.com/questions/9459657/synchronization-and-system-out-println – User
La sécurité des threads n'est-elle pas assurée? le code source ajouter sychnroized maintenant public void println (int x) { synchronisé (this) { impression (x); newLine(); } } –
Je pense que le problème est ordre d'exécution, Athought Sout n'est pas threadsafe, il n'y a pas d'effets pour le code. –