在桌面Java1.5应用程序中(它必须在许多MacOSX机器上运行,由于苹果的政治原因,这些机器不会看到1.6VM),在EDT之外执行长时间计算的正确方法是什么?
比如说,当用户点击一个按钮开始一个操作:我在edt上得到通知,我想运行一些方法(比如
crunchData()
)
有一种方法:
final Thread t = new Thread( new Runnable() {
public void run() {
crunchData();
}
} );
t.start;
我的意思是:这就是我想要的,但是每次用户启动一个潜在的长时间运行的任务时,我都会使用上面的习惯用法。我觉得我总是不必要地创建大量的任务(此外,虽然有时操作可能会很长,有时不会,在这种情况下,我希望应用程序尽可能负责任)。
另一种方法是让另一个(非edt)线程(或线程池)始终运行,比如等待阻塞队列并执行,
可运行的
我会在任何需要执行长时间操作的地方排队。
是什么
这个
正确的处理方法?
编辑:
是处理安装简单的东西的正确方法
SwingWorker
?以前人们是如何处理这个问题的(看起来很基本)
摇摆工人
来了?