Необычное поведение при вызове System.out.println из виртуальных потоковJAVA

Программисты JAVA общаются здесь
Anonymous
Необычное поведение при вызове System.out.println из виртуальных потоков

Сообщение Anonymous »

При запуске примера программы, которая вызывает метод System.out.println из новых виртуальных потоков Java, я получаю странные результаты. Вот пример программы:

Код: Выделить всё

import java.math.BigInteger;
import java.time.LocalDateTime;

public class VirtualThreadTest {

public static void main(String[] args) {
for(int i = 1; i  {
System.out.println(LocalDateTime.now());
System.out.flush();
expensiveTask();
});
}

sleepMainThread();
}

private static void expensiveTask() {
var bi = BigInteger.ONE;
for(int i = 2; i < 50_000; i+=1) {
bi = bi.multiply(BigInteger.valueOf(i));
}
}

private static void sleepMainThread() {
try {
Thread.sleep(60_000);
} catch(Exception e) { e.printStackTrace(); }
}
}
Сначала программа будет печатать текущее время в порядке возрастания, но через некоторое время она будет печатать значения в прошлом, например:

Код: Выделить всё

2024-05-08T14:17:34.925188363
2024-05-08T14:17:34.925920200
2024-05-08T14:17:34.925993640
2024-05-08T14:17:34.926365126
...
2024-05-08T14:17:50.927143298
2024-05-08T14:17:51.136285346
2024-05-08T14:17:34.925684196  // prints value in the past
2024-05-08T14:17:51.251390867
2024-05-08T14:17:51.309471812

Кто-нибудь знает, почему это происходит? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/784 ... al-threads

Вернуться в «JAVA»