代码之家  ›  专栏  ›  技术社区  ›  NoozNooz42

在EDT之外执行长时间运行操作的正确方法是什么?

  •  3
  • NoozNooz42  · 技术社区  · 14 年前

    在桌面Java1.5应用程序中(它必须在许多MacOSX机器上运行,由于苹果的政治原因,这些机器不会看到1.6VM),在EDT之外执行长时间计算的正确方法是什么?

    比如说,当用户点击一个按钮开始一个操作:我在edt上得到通知,我想运行一些方法(比如 crunchData() )

    有一种方法:

            final Thread t = new Thread( new Runnable() {
                public void run() {
                    crunchData();
                }
            } );
            t.start;
    

    我的意思是:这就是我想要的,但是每次用户启动一个潜在的长时间运行的任务时,我都会使用上面的习惯用法。我觉得我总是不必要地创建大量的任务(此外,虽然有时操作可能会很长,有时不会,在这种情况下,我希望应用程序尽可能负责任)。

    另一种方法是让另一个(非edt)线程(或线程池)始终运行,比如等待阻塞队列并执行, 可运行的 我会在任何需要执行长时间操作的地方排队。

    是什么 这个 正确的处理方法?

    编辑: 是处理安装简单的东西的正确方法 SwingWorker ?以前人们是如何处理这个问题的(看起来很基本) 摇摆工人 来了?

    1 回复  |  直到 9 年前
        1
  •  3
  •   Riduidel    14 年前

    推荐的方法是让edt代码启动 SwingWorker ,它将在外部执行任务并将结果返回给您。