Не могу понять, почему именно в самом конце выводится проверка? у нас потоки независимо друг от друга выполняются и нет 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: проверка... вообще не понимаю. Можете пояснить?