我想运行多个线程并将它们加入到主方法的末尾,这样我就可以知道它们何时完成并处理一些信息。
我不想将我的线程放入数组中并逐个执行 join() ,因为 join 是一种阻塞方法,我会留在主线程中等待某些线程仍在运行,而其他线程可能已经完成,没有可能知道。
我考虑过为我的线程实现观察者模式的可能性:一个带有 update() 方法的接口,一个从线程扩展的抽象类(或实现可运行的),带有侦听器的 set 和 get 方法以及启动所有线程的类并等待他们完成。
如果我的理解是正确的,观察者不会阻塞线程的特定 join() 。相反,它会以某种方式等待,直到线程调用 update() 方法来执行操作。在这种情况下,应在线程完成后立即调用 update()。
我对如何实现这一点一无所知。我尝试过类似的模型,但我不知道如何使用观察者/侦听器来唤醒/阻止我的主线程。我用这个旧帖子作为模板:如何知道其他线程是否完成? https://stackoverflow.com/questions/702415/how-to-know-if-other-threads-have-finished但一旦线程调用 update() 方法,我就找不到唤醒我的 main 方法的方法。所有线程只会实例化一个观察者对象。
您能否想出一种方法,使用观察者模式来等待所有线程完成,而不会通过一个接一个的 join() 调用来阻塞 main 函数?任何其他解决此问题的建议将不胜感激。提前致谢。
Java 已经有一个 API 可以做到这一点:CompletionService http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CompletionService.html.
一种将新异步任务的生成与已完成任务结果的消耗分离的服务。生产者提交任务以供执行。消费者接受已完成的任务并按照完成的顺序处理结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)