我目前正在研究某个课程的某些代码。我不能发布代码,但我可以谈论一些我正在努力的高级概念并接受他们的输入。基本上,代码是一个无向图上的递归DFS,我应该将其转换为并发程序。我的教授已经指定我应该在递归DFS方法中创建我的线程,然后以另一种方法加入它们。基本上,我在思考如何跟踪我创建的线程时遇到问题,因此我可以用其他方法加入所有线程。我正在考虑一系列线程,但我不确定如何将每个新线程添加到数组,或者即使这是正确的方向。递归创建时跟踪线程
2
A
回答
0
听起来不错,你会想要一个线程列表。由于您将从多个线程访问列表/数组,因此您可以使用其中一个线程安全列表类,或者拥有一个同步的“addThread(Thread newlyCreatedThread)”方法。希望这可以帮助!
0
您可以在主应用程序线程中创建一个新的ThreadGroup对象,然后让它的所有派生线程成员。当你尝试让ThreadGroup返回时,你只需要警惕ThreadGroup枚举方法的古怪语义。 (仔细阅读javadoc!)
无论如何加入他们的目的是什么?只是为了了解他们是否完成了?也许学习如何通过接口来实现Java中的委托模式会很有帮助。
2
实现此目的的另一种方法是使用BlockingQueue
和ThreadPoolExecutor
。 您可以不断地将新线程添加到BlockingQueue
,保持计数您添加的人数,然后在完成后关闭ThreadPoolExecutor
。
private ThreadPoolExecutor pool;
private BlockingQueue<Runnable> queue;
...
this.pool = new ThreadPoolExecutor(10, 10, new Long(1000),
TimeUnit.MILLISECONDS, this.queue);
...
//new thread created and added to the queue
requestedTasks++
if (requestedTasks == this.pool.getCompletedTaskCount() && this.queue.isEmpty()) {
this.pool.shutdown();
}
相关问题
- 1. Java线程创建跟踪
- 2. 跟踪递归
- 3. 递归循环跟踪
- 4. 在OOP中跟踪递归调用
- 5. 跨递归函数跟踪状态
- 6. 跟踪ocaml的递归函数
- 7. Git LFS跟踪文件夹递归地
- 8. 跟踪递归硬币更改算法
- 9. Firebase归因跟踪
- 10. 跟踪Java线程创建和生存期
- 11. 跟踪线程失败
- 12. 如何跟踪这个C递归程序
- 13. 曲线跟踪
- 14. 递归追踪
- 15. 递归创建树
- 16. 多线程光线跟踪噪声
- 17. 使用光线跟踪并行线程
- 18. 如何创建Web部件以跟踪页面创建时间
- 19. 如何创建Web部件来跟踪页面创建时间
- 20. 如何创建一个Android GPS实时跟踪应用程序?
- 21. 通过引用参数传递跟踪递归算法
- 22. 只跟踪同一类型的消息和线程跟踪 - C#
- 23. 如何创建递归超时函数
- 24. 如何创建一端跟踪鼠标指针的多段线
- 25. 递归线程中的java.lang.OutOfMemoryError
- 26. 线程内的递归
- 27. Java线程安全递归
- 28. 多线程和递归
- 29. 实时跟踪路线地图api V3
- 30. 如何在Android中跟踪C线程?
谢谢。所以像ArrayBlockingQueue可能是一个好主意?我没有想到我的列表是线程安全的。 – 66replica 2010-05-04 23:43:56
BlockingQueue是传递信息的线程安全方式。你的清单是否在中期迭代?如果没有,那么你不需要担心你如何分配工作的线程安全。线程正在运行的线程安全,是的。 – bwawok 2010-05-05 02:08:23