На нити рассылки событий --- хочу от нее избавиться
Предположим, что мой метод иногда вызывается в потоке диспетчеризации событий, а иногда нет. Теперь предположим, что часть кода в этом методе я хочу вызвать в потоке, отличном от потока диспетчеризации событий.
Есть ли способ запустить какой-то код в потоке, отличном от 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