Мне нужно создать новый поток, который будет выполнять метод тогда и только тогда, когда MessageReceivedEvent обновляется внутри основного ListenerAdapter, и позволять потоку спать, когда переменная не обновляется.Этот поток должен работать независимо от основного потока и не останавливать новые запросы.
Это класс потока,
private static final class Worker extends Thread {
private volatile boolean running = false;
MessageReceivedEvent event; //this must update along with the listener
private boolean validateData() {
if (//something) {
return true;
}
return false;
}
private void waitForInput() {
boolean hasInput = false;
try {
while (!hasInput) {
hasInput = validateData();
if (!hasInput) {
Thread.sleep(10);
}
}
} catch (InterruptedException iex) {
Thread.currentThread().interrupt();
}
}
@Override
public void run() {
running = true;
while (running) {
waitForInput();
//do something
}
}
}
Это внутренний класс, запускаемый запросом из основного потока,MessageReceivedEvent внутри него должен обновляться только при изменении фактического события от слушателя, в противном случае он ничего не должен делать.При тестировании он будет выполняться только на основе MessageEvent, вызвавшего поток. Как я могу заставить этот поток получать обновления?
public class Listener extends ListenerAdapter {
public static MessageReceivedEvent msgEvnt;
@Override
public void onMessageReceived(MessageReceivedEvent msgEvnt) {
Listener.msgEvnt = msgEvnt;
}
Это все, что делает слушатель, обновляет переменную всякий раз, когда появляется новыйMessageEvent.