Вам потребуется некоторая синхронизация, чтобы изменения в temp
распространялись на все необходимые потоки. Но начинать с этого плохого подхода - getInput
приведет к потере большого количества циклов ЦП в этом while
без какой-либо цели.
Вы могли бы сделать это более чисто. Сначала объявите temp
как java.lang.Object
и инициализируйте его как простой старый объект:
private Object temp = new Object();
(или что-то в этом роде)
В getInput вместо этого:
while (!temp) { }
temp = false;
поставить это:
synchronized (temp) {
try {
temp.wait();
} catch (InterruptedException ie) {
// handle this situation: something interrupted your thread before input was finished
}
}
А в обработчике событий:
synchronized (temp) {
temp.notify();
}
Таким образом, поток, выполняющий getInput
, остается спящим, ожидая, что что-то произойдет, а не сжигая циклы ЦП.
Существуют также варианты wait()
, которые принимают значение времени ожидания. Возможно, вам будет интересно их использовать.