在桌面 Java 1.5 应用程序中(它必须在许多 MacOS X 机器上运行,由于 Apple 政治,这些机器会紧张地看到 1.6 VM)在 EDT 之外执行冗长计算的正确方法是什么?
例如,当用户单击启动操作的按钮时:我在 EDT 上收到通知,我想运行某个方法(例如crunchData()
)。
这是一种方法:
final Thread t = new Thread( new Runnable() {
public void run() {
crunchData();
}
} );
t.start;
我的意思是:这可以满足我的要求,但是每次用户启动一个可能需要长时间运行的任务时,我都会使用上述成语。而且我觉得我总是在不必要地创建大量任务(此外,虽然有时操作可能很长,但有时不会,在这种情况下,我希望应用程序尽可能负责)。
另一种方法是让另一个(非 EDT)线程(或线程池)始终运行,比如说在阻塞队列上等待并执行,比如说,Runnable,我会在任何需要执行冗长的地方排队手术。
处理这个问题的正确方法是什么?
编辑:处理简单安装的东西的正确方法是什么SwingWorker
?人们是如何处理这个(这似乎很基本)SwingWorker
的?