Я предполагаю, что вы используете SwingWorker для публикации своих результатов. Вы можете использовать логический флаг, чтобы указать, что значение было обработано. Этот флаг очищается перед публикацией промежуточных результатов, а затем используется для блокировки потока, пока он не будет установлен. Поток пользовательского интерфейса устанавливает флаг, когда он завершает обработку опубликованных данных.
class MyWorker extends SwingWorker<K,V>
{
boolean processed = true;
protected void doInBackground() {
for (;;) {
setProcessed(false);
publish(results);
waitProcessed(true);
}
}
synchronized void waitProcessed(boolean b) {
while (processed!=b) {
wait();
}
// catch interrupted exception etc.
}
synchronized void setProcessed(boolean b) {
processed = b;
notifyAll();
}
protected void process(List<V> results) {
doStuff();
setProcessed(true);
}
}