在桌面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
到来之前,人们是如何处理这个问题的?这似乎是非常基本的?