2013-09-30 88 views
0

我有一个关于在gui应用程序中使用线程的问题。说(作为一个简单的例子)我有一系列图像的swing应用程序。我有两个线程我想运行,分别获取父母的图像。 (因此,对于给定数量的学生,从每个服务器端点获取母亲图像和父亲图像)。然后将父亲和母亲的返回图像附加到屏幕上的图像上,所以我有一系列图像与一位母亲,父亲,母亲,父亲为多个学生。带秋千的多线程

我该如何在多线程环境中安排此功能?每次获取母亲或父亲图像的呼叫都必须平行,而不是屏幕上显示的图像。在每个线程返回图像后,屏幕上显示的图像是否刷新?这将如何构建?

+2

看看SwingWorker和ExecutorService – nachokk

回答

2

Concurrency in Swing开始。

绝对最简单的方法可能是使用一个SwingWorker,它有一个它需要查找并允许它处理列表的项目列表。

这样做的问题是它只会在另一个请求中运行一个请求,使其比其他选项慢一点。这样做的好处是它提供了简单的功能来重新与Event Dispatching Thread同步,以便您可以通知UI或对其进行安全更改。

另一种选择可能是使用Executors,特别是Thread Pool实现。

这允许您提交一些应该在将来某个时间执行的任务,但允许您控制进程可以在任何时间使用的线程数。

的缺点是,当你要更新的用户界面,你成为负责同步更改回自己的用户界面,使用SwingUtilities.invokeLater

现在。你“可以”使用两者。

基本上,您需要设置某种“请求”类,它允许您将相关信息传递给例如“母亲”和“父亲”服务器,原始图像以及可能的某种回调界面,它会告诉你何时呈现最终图像。

请求者会建立某种RunnableCallable这将包装SwingWorker

执行时,此“请求任务”将启动SwingWorker,允许它获取图像,合并它们和publish结果,这会通知回调接口。然后,“请求任务”将在退出之前等待直到SwingWorker#get返回。

作为一个想法...