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

Pau*_*ers 3 java multithreading event-dispatch-thread awt-eventqueue

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

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

我试过这个:

        if (SwingUtilities.isEventDispatchThread()) {
            new Runnable() {
                @Override
                public void run() {
                    myMethod();
                }
            }.run();
        } else {
            myMethod();
        }
Run Code Online (Sandbox Code Playgroud)

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

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

小智 7

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

例如

new Thread(new Runnable() {
 @Override
 public void run() {
     myMethod();
 }
}).start();
Run Code Online (Sandbox Code Playgroud)

请注意,调用"run()"方法不会启动新的Thread.请改用start().

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