gpt4 book ai didi

java - swingWorker 是否保证在完成时抛出状态属性更改事件?

转载 作者:搜寻专家 更新时间:2023-11-01 02:15:06 25 4
gpt4 key购买 nike

我有一个类接收多个 SwingWorker 并按特定顺序一次运行一个。我使用 ReentrantLock 来确保一次只有一个 worker 运行。通常我总是会在 finally 子句中解锁,但我需要它保持锁定状态直到 worker 完成。

        nextWorker.getPropertyChangeSupport().addPropertyChangeListener("state", 
new PropertyChangeListener()
{
@Override
public void propertyChange(PropertyChangeEvent evt)
{
if (evt.getNewValue().equals(SwingWorker.StateValue.DONE))
{
executionLock.unlock();
}
}
});

如果不是这种情况,是否保证会调用 done()?我不希望以这种方式调用解锁,因为它会在某种程度上违反封装。

由于项目的性质,这很可能会出现在代码审查中。在这种情况下,拥有可验证的来源会很有帮助。到目前为止,我一直找不到。

最佳答案

  • 我个人用 SwingWorker 尝试了所有可能的方法,但总是以 done() 结束,但我认为不能保证从 实现的方法>Future 正确结束,仍然有这个 Bug

  • 不知道您的代码是关于锁定/解锁另一个线程或进程的,但我建议使用 Executor 进行多线程处理,

  • 如何获得 exceptions来自 SwingWorker 任务

  • 就我个人而言,我从未有过使用 SwingWorker 的糟糕经历或一些意想不到的不足,但所有 MultiThreading 大师都谈到了 SwingWorker对于生产代码,仍然需要使用 Runnable#Thread 而不是 SwingWorker

关于java - swingWorker 是否保证在完成时抛出状态属性更改事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7678841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com