【发布时间】:2021-02-06 08:47:09
【问题描述】:
我的问题与this问题有关,已经有了答案:
是的,动作之间存在 happens-before 关系 调用
invokeLater/invokeAndWait的线程和对 从而提交的可运行文件的 EDT。
我的问题有点笼统:是否有可能实现一个方法,例如invokeAndWait,使其正常工作,但不强加发生之前 关系?通过方法正常工作我的意思是:
- 提交的
Runnable保证只执行一次。 - 提交的
Runnable在特定线程上执行。 - 该方法一直等待,直到提交的
Runnable的执行完成。 - 该方法保证在提交的
Runnable执行完成后返回。
对我来说,如果不施加 happens-before 关系,似乎没有办法实现这一点,还是我错了?如果是这样,请提供一个示例实现,它可以证明这一点。
【问题讨论】:
-
出于好奇,为什么要在特定线程中完成计算,但同时又阻塞了调用线程?
-
与问题本身无关,但您可能希望仅在特定线程上执行不是线程安全的代码,然后在另一个线程上等待结果。我认为这也是 SwingUtilities.invokeAndWait(java.lang.Runnable) 函数的用例。
-
好的,这是为了防止该计算的并行性..
标签: java multithreading runnable happens-before invokeandwait