在事件派遣线程---想要离开它

时间:2014-04-22 19:48:36

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

假设我拥有的方法有时在Event Dispatch Thread上调用,有时则不然。现在假设我希望在事件调度线程以外的线程上调用该方法中的一些代码。

此时有没有办法在EDT以外的线程上运行某些代码?

我试过了:

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

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

有没有办法在EDT以外的线程上运行myMethod()?

1 个答案:

答案 0 :(得分:7)

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

e.g。

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

请注意,调用“run()”方法不会启动新的Thread。改为使用start()。

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