私はこのコードについてとても困惑している:なぜSystem.out.printlnは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);
}
}
私は上記のコードで、このコードSystem.out.println("test02 end !");
を追加しない場合。
操作結果は印刷1000になりますが、コードを入力すると操作結果が "test02 end!"に変わります。 2000年。
私はなぜ、どのようにそれを説明するのか分からないのですか?
System.out.printline()はスレッドセーフではありません。https://stackoverflow.com/questions/9459657/synchronization-and-system-out-println – User
まだスレッドセーフではありませんか?ソースコードはすぐに追加されました。 public void println(int x){ { print(x); newLine(); } } –
私は問題が実行されていると思う、Athought Soutはスレッドセーフではない、コードに影響はない。 –