Гарантируется ли swingWorker событие изменения свойства состояния по завершении?
У меня есть класс, который принимает рядSwingWorkers
и запускает их по одному в определенном порядке. Я используюReentrantLock
чтобы убедиться, что одновременно работает только один работник. Обычно я всегда разблокирую в пункте finally, но мне нужно, чтобы он оставался заблокированным до завершения рабочего процесса.
nextWorker.getPropertyChangeSupport().addPropertyChangeListener("state",
new PropertyChangeListener()
{
@Override
public void propertyChange(PropertyChangeEvent evt)
{
if (evt.getNewValue().equals(SwingWorker.StateValue.DONE))
{
executionLock.unlock();
}
}
});
Если это не так, гарантированно вызывается метод done ()? Я бы предпочел не называть разблокировку таким образом, так как это в некоторой степени нарушит инкапсуляцию.
Из-за характера проекта вполне вероятно, что это появится в обзоре кода. В этом случае было бы полезно иметь проверяемый источник. До сих пор я не смог найти один.