На нити рассылки событий --- хочу от нее избавиться

Предположим, что мой метод иногда вызывается в потоке диспетчеризации событий, а иногда нет. Теперь предположим, что часть кода в этом методе я хочу вызвать в потоке, отличном от потока диспетчеризации событий.

Есть ли способ запустить какой-то код в потоке, отличном от EDT, на этом этапе?

Я попробовал это:

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

Но myMethod() в конечном итоге работал на EDT, даже когда я создал новый Runnable.

Есть ли способ запустить myMethod() в потоке, отличном от EDT, на этом этапе?

1 ответ

Решение

Ты делаешь это просто отлично. Но ваш Runnable должен быть передан в новую ветку.

например

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

Обратите внимание, что при вызове метода run() новый поток не будет запущен. Вместо этого используйте start().

Смотрите также http://docs.oracle.com/javase/tutorial/essential/concurrency/simple.html

Другие вопросы по тегам