java - On Event Dispatch Thread---想摆脱它

标签 java multithreading event-dispatch-thread awt-eventqueue

假设我拥有的方法有时会在事件调度线程上调用,有时不会。现在假设我想在事件调度线程以外的线程上调用该方法中的一些代码。

此时是否有办法在 EDT 以外的线程上运行一些代码?

我试过这个:

        if (SwingUtilities.isEventDispatchThread()) {
            new Runnable() {
                @Override
                public void run() {
                    myMethod();
                }
            }.run();
        } else {
            myMethod();
        }

但 myMethod() 最终在 EDT 上运行,即使我创建了一个新的 Runnable。

此时是否有办法在 EDT 以外的线程上运行 myMethod()?

最佳答案

你做得很好。但是你的 Runnable 必须传递给一个新的线程。

例如

new Thread(new Runnable() {
 @Override
 public void run() {
     myMethod();
 }
}).start();

请注意,调用“run()”方法不会启动新线程。请改用 start()。

另见 http://docs.oracle.com/javase/tutorial/essential/concurrency/simple.html

关于java - On Event Dispatch Thread---想摆脱它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23228822/

相关文章:

java - 如何在 Https 服务器中显示 HTTP url?

java - 使用java查找快乐数字: Nested while loop loops indefinitely

java - 如何在具有@DataProvider、@Factory和一个@Test方法的TestNG中配置多线程

Java 事件队列。为什么一切都应该在 invokelater 方法中?

java - 从 Swing 应用程序中的 EDT 事件处理程序代码内部启动线程

java - JLabel在打开文件时是透明的

java - 使用具有不同根和节点类型的 TreeTable

java - NullPointer 与 Arquillian CDI 测试

c - C-多线程在计算时间上有好处吗?

multithreading - 两个或多个线程如何在它们分配的堆上共享内存?