将同步调用封装在异步版本中



我有一个应用程序,我正在尝试重组它以使用MVC架构。GUI启动了几个长时间运行的函数调用,如果我不将它们从GUI线程中分离出来,这些函数调用就会阻塞接口。

现在我想知道,将具有长时间运行函数的控制器的对象包装到另一个版本中,只将当前调用分离到线程池是否是个好主意?这类问题有什么规律吗?

编辑也许我应该提供一个样品。目前,我的代码中充斥着以下内容:

env.getScheduledExecutor().execute(new Runnable() {
  public void run() {
    backend.someLongRunningMethod();
  }
});

现在我想知道是否应该将Backend封装到类似BackendFacade类的东西中,该类只将任何函数调用封装到可运行的中,并将其调度到执行器。

值得注意的是,大多数情况下,方法都会返回void,否则我根本不在乎。在极少数情况下,我需要取回值,我只使用Future。这不应该是一个巨大的变化,因为我已经在某个时候解耦了线程,但我想在整个项目中巩固它的实现方式。

这听起来很像某种异步调用。通常不同的框架对此有不同的支持

@异步//Servlet/Springs可以。GUI应该也有

如果您的框架不允许这样做,那么让线程池这样做不会有任何问题。

从同步到异步总是一个根本性的设计更改,因为现在后台任务需要将结果推送到适当的位置,而不是等待结果并实际上。最后,这看起来很像任何其他Swing Listener。您可以发明自己的回调接口,在传递给后台任务的实例中实现该接口。该任务将调用该实例上的"result-ready"方法,该方法将调用结果处理代码。

还有SwingWorker类,但它没有实现线程池。每个实例都将使用一个新线程。

相关内容

  • 没有找到相关文章

最新更新