У меня следующая проблема. Имеется интерфейс EventNotifier для шаблона наблюдателя:
public interface EventNotifier {
void newEvent(final String value);
}
Класс, который реализует этот Интерфейс, может зарегистрироваться в другом классе, который очень часто вызывает метод newEvent. Интерфейс предоставляется внешней библиотекой, поэтому я не могу его изменить. До сих пор я реализовал это с помощью анонимного класса:
Thread t = new Thread(new Runnable() {
@Override
public void run() {
watcher = new Watcher(new EventNotifier() {
@Override
public void newEvent(String value) {
//do some stuff
//will be called more than 20 times per second
}
});
});
t.start();
Для лучшей читабельности кода я хотел бы представить этот анонимный класс в новый класс, который расширяет Thread (потому что обработка должна быть параллельна другим вещам).
Как я могу написать поток, который ничего не делает (без бесконечного цикла и т. Д.), Но ожидает вызова метода newEvent? Проблема в том, что newEvent будет вызываться более 20 раз в секунду, поэтому я не могу запустить новый поток для каждого вызова, но все это должно быть в потоке.
Надеюсь, у вас проблема, и кто-нибудь может мне помочь.