antego, можете указать на состояние гонки? я с многопоточностью очень слабо знаком. Начал прочтение книги, но там без привязки к языку.
Здесь как я вижу основная проблема в условиях циклов while, которые выполняют что-то вроде await по предикату. Видимо, без volatile потоки не так читали и писали в примитивы, как того бы хотелось
Gomonov, так вроде и не должен он попасть. В условии написано "до момента, когда пришел 0". Если этот момент совпадает с моментом прихода единицы, то не надо включать. В общем, демагогия)
Главное, что товарищу помогли)
с конца: нужны два метода isArabic(Expression) и isRoman(Expression). С помощью них можно будет валидировать выражение, если и то, и другое false => бросаем исключение.
По первому вопросу сложнее. Необходимо написать обратный конвертер DecimalToRoman. Здесь есть решение
Все вычисления советую проводить в обычных числах, а результат конвертировать, если есть необходимость в римскую запись
Если нужна пауза при определенных действиях (т. е. не при всех), то можно попробовать декорировать необходимые методы, добавив паузы или запрашивая разрешение для продолжения