Не могу понять, почему именно в самом конце выводится проверка?
у нас потоки независимо друг от друга выполняются и нет join каких-то. поток у нас меняет постоянно баланс. Логично чтобы параллельно с ним сразу проверки выдавались
возможно это связано с isAlive. Я посмотрел, сначала у нас поток по проверкам монотонно работает, а только потом начинает второй поток работать с изменением баланса
Попробовал чуть код поменять, чтобы разобраться.
Thread controlThread = new Thread(() -> {
System.out.println("_" + operationThread.isAlive());
while (operationThread.isAlive()) {
System.out.println(operationThread.isAlive());
accounts.stream().filter(a -> a.balanceChanged).forEach(Account::checkBalance);
}
});
в результате у меня в цикле только 1 строка true выводится!
Транзакция №2034: списание $1 со счета №44444444. Баланс: 3000.
Транзакция №2034: зачисление $1 на счет №77777. Баланс: 10.
_true
true
Транзакция №1500: списание $10 со счета №44444444. Баланс: 2999.
Транзакция №1500: зачисление $10 на счет №77777. Баланс: 11.
Транзакция №3145: списание $100 со счета №44444444. Баланс: 2989.
Транзакция №3145: зачисление $100 на счет №77777. Баланс: 21.
Транзакция №1458: списание $1000 со счета №44444444. Баланс: 2889.
Транзакция №1458: зачисление $1000 на счет №77777. Баланс: 121.
44444444: проверка...
77777: проверка...
вообще не понимаю. Можете пояснить?