Код: Выделить всё
public void run() throws IOException {
new Thread(new Runnable() {
public void run() {
try {
System.out.println("--- start cons");
consumer.runConsumerThread();
System.out.println("--- done cons");
} finally {
synchronized (TrackFeeder.this) {
exit = true;
TrackFeeder.this.notifyAll();
}
}
}
}, "Audio Consumer").start();
< /code>
Когда ошибка не возникает, вывод из обеих этих распечаток появляется в терминале, где я запускаю программу, но безумно заключается в том, что в ситуации, где возникает ошибка , появляется только вторая распечатка . То есть я получаю < /p>
--- done cons
< /code>
в терминале, но нигде не «--- Start Cons». Как это возможно? Не берите в голову, что существует много резьбовых вещей, и, по -видимому, продолжается какое -то состояние раса: эти операторы явно выполняются в одном и том же потоке, один за другим, так как это возможно для вывода из second One появиться без первого появления перед ним? Конечно, существует выход для System.out
Моя платформа-Raspberry Pi с OpenJDK 17.0.13+11-Raspbian-2Deb12u1rpt1. Я запускаю один и тот же код на других машинах, но я наблюдал только ошибку, которую я преследую на PI. Феномен здесь, и, конечно, не ожидайте, что кто -то другой отладкует мой код, но на случай, если вы хотите проверить, что я делаю где -то еще, мой полный код здесь, под SRC/Java/Net/Avadeaux/Klipspringer/< /Code> Bullet, и файл, который я цитирую, IS Trackfeeder.java.
Подробнее здесь: https://stackoverflow.com/questions/794 ... ut-be-lost