【发布时间】:2012-11-03 22:27:59
【问题描述】:
我一直在阅读一些关于并发的文章(这让我很头疼)。
我了解您可以使用以下方法从主线程设置要在 EDT 上运行的任务:
SwingUtilities.invokeLater
但是你可以设置一个任务在 EDT 的主线程上运行吗?
如:
Thread mymainthread=Thread.currentThread();//<referring to the thread that initially kicks off public static void main
public void mousePressed(MouseEvent e){ //queue a task to run on mymainthread }
可以吗?这是个坏主意吗?
另一个与此类似的问题 (here) 谈到了创建一个新线程,但如果我的目标是单线程 (+EDT) 应用程序,继续使用主线程不是更安全、更简单吗? .......或者也许我错了。
编辑:我应该解释的:我想创建可以在主线程上相互通信的对象(在慢循环中运行)所以我不希望它们中的任何一个在不同的线程上实例化,edt或其他。
【问题讨论】:
-
您为什么要这样做?你能告诉我们更多关于你请求背后的动机吗?我自己,我认为你把这一切都搞错了。 :-) 只要您不创建数百个后台线程,创建后台线程就没有错。如果您担心这种情况,请使用某种线程池。
-
@HovercraftFullOfEels 这似乎是我的问题的一个常见问题。我在想,如果我正在创建经常相互通信的对象,那么确保它们都在同一个线程上创建不是更明智吗?
-
Nikki:不,我认为最好努力确保以线程安全的方式进行通信。
-
默认情况下,所有鼠标和键事件都在 EDT 上调度,但取决于这些事件/侦听器的目标,什么是“主要”???
-
@mKorbel 抱歉,缺少详细信息。我更新了我的问题。我指的是启动应用程序的线程。 (在创建 gui 之前)。我想保留它并将其用作程序的主干,并让 EDT 尽可能少地做
标签: java multithreading swing concurrency event-dispatch-thread