У меня есть класс, который принимает число 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 ()? Я бы предпочел не вызывать анлок таким способом, так как это в некоторой степени нарушит инкапсуляцию.
В связи с характером проекта вполне вероятно, что это появится в обзоре кода. В этом случае было бы полезно иметь проверяемый источник. До сих пор я не смог найти один.