gpt4 book ai didi

java - JCheckBox.isSelected() 线程安全吗?

转载 作者:行者123 更新时间:2023-11-30 10:29:27 25 4
gpt4 key购买 nike

我目前正在重构我制作的一个线程安全的应用程序。

我有一个需要检查的 JCheckBox。此 JCheckBox 在整个程序中的各种不同线程中被引用。

我可以简单地调用 checkbox.isSelected() 还是必须使用 invokeLater 进行调用?

我发现很难理解一般的并发性,但我正在缓慢但肯定地到达那里。如果这是一个愚蠢的问题,请告诉我原因,以便我更好地理解。

谢谢。

最佳答案

不,它不是线程安全的。 Swing 通常不是线程安全的。您需要使用 invokeLater。另一方面,您可以让当前线程等待,直到 invokeLater 中的任务完成:

private boolean isSelected(final AbstractButton button) {
if (SwingUtilities.isEventDispatchThread()) {
// a shortcut so the AWT thread won't wait for itself
return button.isSelected();
}
final AtomicBoolean isSelected = new AtomicBoolean();
final CountDownLatch latch = new CountDownLatch(1);
SwingUtilities.invokeLater(() -> {
try {
isSelected.set(button.isSelected());
} finally {
latch.countDown();
}
});
try {
latch.await();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return isSelected.get();
}

关于java - JCheckBox.isSelected() 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44023335/

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