java如何在调用方法时等待特定线程完成
我有一个ArrayList,其中的URL指向需要下载和显示的html文件。现在我只是在ArrayList中循环并下载主线程上的所有文件
下载完所有文件后,我将在jxbrowser中显示第一个html页面。我还制作了“下一步”和“上一步”按钮,以便用户可以循环浏览html页面
目前我需要等到所有的文件都下载完毕,有时需要很长时间。 我想在单独的线程中下载所有文件,并在下载后显示第一页。其他文件将继续在后台下载。如果用户单击“下一步”按钮,并且下载该文件的线程未完成,则用户应该会收到一条错误消息
我不知道如何做到这一点,因为我是java的初学者,所以任何帮助都将不胜感激
# 1 楼答案
当用户执行正确的操作(如按下“下一步”按钮)时,给用户一个错误是糟糕的界面设计
我建议创建dummy页内容来解释目标URL正在加载。在下载列表中创建尽可能多的URL页面。最初向用户显示这些虚拟页面
将这些虚拟页的内容存储在thread-safe^{} 实现中,例如^{} 。地图的关键应该是要下载的URL。地图的值将是页面内容。最初,所有值都是虚拟页面。然后使用后台线程,用成功下载页面的内容替换每个虚拟页面
使用executor服务执行下载。为每个URL提交一个下载程序实例,作为^{} /^{} 任务
当每个任务完成时,将页面内容放入映射以替换虚拟页面
然后使用JavaFX机制要求用户界面线程更新其显示,从虚拟页面转换到下载页面从不从后台线程访问或修改用户界面小部件。欲了解更多信息,请点击search Stack Overflow查看Complex concurrency in JavaFX: using ObservableLists and Properties from multiple worker threads等帖子
记得优雅地shut down the executor service。否则,它的线程备份池可能会像僵尸一样无限期地运行🧟♂️.
所有这些主题在堆栈溢出问题上已经讨论过很多次了。因此,搜索以了解更多信息