2017-05-30 46 views
0

如果我在另一个线程上创建一个GUI,并确保发生在GUI上的任何更新都发生在该线程上并且该线程只是它是线程安全的吗?我知道这很难确保,所以我有点问:与其他线程相比,EDT有什么特别的/不同的东西?如果我在一个不是EDT的单线程上处理GUI,它仍然是线程安全的吗?

请记住,我不是在问这个问题的良好实践或其他解决方案,我问的是,如果在纯粹的技术层面上,基本上是否像EDT那样处理线程,是否会在GUI上创建GUI新线程可以安全使用?

+0

如果用户在GUI上单击鼠标,MouseEvent将在哪个线程上传递给MouseListeners? – VGR

+0

我会假定它总是被交付给EDT。我希望他们在大学里提到这些东西。我的并发模块有一位特别残酷的讲师......因此,为了澄清,某些事件总是在美国东部时间完成的,无法控制它。对不起,如果这些都是愚蠢的问题顺便说一句。 – DCON

+1

正确。事件调度线程由AWT系统控制。基于本地输入的Java事件的创建是在内部完成的,它们被发送到该线程。 – VGR

回答

1

它不是线程安全的,因为您的进程不是唯一读取/写入UI元素的进程。 JRE也是可读写的,但它通过EDT来完成。因此,即使您在单线程中读取/写入非EDT,也有在EDT中执行的进程 - 所以最终只有一个UI元素,线程很少,没有同步。

相关问题