gpt4 book ai didi

java - 在 invokeLater() 或 invokeAndWait 的情况下是否给出了发生前关系?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:12 27 4
gpt4 key购买 nike

很确定是这样 - 但我想确定 -是在 invokeLater() 或 invokeAndWait() 的情况下给出的 happens-before 关系?

这些方法在(分别为 SwingUtilities)AWT.EventQueue 中定义。我想在 EventQueue 中输入内容时会涉及同步因此作为同步的结果,先发生关系和最终的可见性被给出。

但真的是这样吗?(我在哪里可以找到该信息?)


例如在一些工作线程中

    ...
*<1> heavy computation modifying lots of DATA*
...
SwingUtilities.invokeLater(
new Runnable() {
@Override
public void run() {
*<2> is visibility of modified DATA guaranteed?*
}
}
);

例如在一些线程中

    ...
SwingUtilities.invokeAndWait(
new Runnable() {
@Override
public void run() {
...
*<1> change some DATA*
}
}
);
*<2> is visibility of modified DATA guaranteed?*

最佳答案

简而言之:是的,在调用 invokeLater/invokeAndWait 的线程的操作和对从而提交了可运行的 EDT。否则整个 API 的健全性将受到威胁。

不幸的是,很难找到任何权威来源来证实这一点。很多关于 Swing 和并发的东西都会发生这种情况。

有关更多信息,请参阅 this answer作者是 trashgod,一位长期的 Swing 大师。

关于java - 在 invokeLater() 或 invokeAndWait 的情况下是否给出了发生前关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21147240/

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