В настольном приложении Java 1.5 (оно должно работать на многих компьютерах MacOS X, которые из-за политики Apple не увидят 1.6 ВМ), каков правильный способ выполнения длительных вычислений вне EDT?
Скажем, например, когда пользователь нажимает кнопку, которая запускает операцию: я получаю уведомление о EDT и хочу запустить какой-то метод (скажем, crunchData()
).
Вот один из способов сделать это:
final Thread t = new Thread( new Runnable() {
public void run() {
crunchData();
}
} );
t.start;
Я имею в виду: это делает то, что я хочу, но каждый раз, когда пользователь запускает потенциально длительное задание, я использую вышеупомянутую идиому. И я чувствую, что я всегда создаю много задач (более того, хотя иногда операция может быть длительной, иногда - нет, и в этом случае я бы хотел, чтобы приложение было максимально ответственным).
Другим способом сделать это было бы иметь другой (не EDT) поток (или пул потоков), всегда работающий, скажем, ожидающий в очереди блокировки и выполняющий, скажем, Runnable , который я будет ставить в очередь везде, где мне нужно выполнить длительную операцию.
Каков правильный способ справиться с этим?
РЕДАКТИРОВАТЬ: Является ли правильный способ иметь дело с чем-то, что просто установить SwingWorker
? Как люди справились с этим (что кажется довольно простым) до того, как SwingWorker
пришел?