我有一个线程正在下载数据,我想等到下载完成后再加载数据。有这样做的标准方法吗?
更多信息:
我有一个从 URL(序列化 POJO)获取数据的下载类。下载是可运行和可观察的。它跟踪下载的字节数和下载大小。我有一个进度条,向用户显示进度。 GUI 观察下载以更新进度条。
下载 POJO 后,我想获取它并转到下一步。每一步都必须等待前一步完成。问题是我想不出一种方法来暂停我的应用程序以等待下载线程。下载完成后,我想调用 download.getObject()
它将数据作为对象返回。然后我可以投射它并继续下一次下载。
我有一个帮助程序类来管理下载 URL 并进行所有下载调用。此调用将调用 getObject 并进行转换。 Gui 调用 helper.getUser()
。 helper 启动线程运行,我希望它在完成时“知道”,以便它可以返回转换后的对象。
有什么建议/例子吗?我正处于这个设计的开始阶段,所以我愿意改变它。
更新:
我按照 http://download.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html#get 并使用模态阻塞直到线程完成。代码很乱,我不喜欢这种方法。我将继续努力寻找一种“干净”的方式来处理下载过程的工作流程。
原文由 Allan 发布,翻译遵循 CC BY-SA 4.0 许可协议
Thread
有一个方法可以为你 加入,它将阻塞直到线程完成执行。