我正在为一门课程编写一些代码。我不能发布代码,但我可以谈谈我正在努力的一些高级概念并接收它们的输入。基本上代码是无向图上的递归DFS,我应该转换为并发程序。我的教授已经指定我应该在递归DFS方法中创建我的线程,然后在另一个方法中加入它们。基本上,我很难想到如何跟踪我正在创建的线程,所以我可以在其他方法中加入所有这些线程。我在想一个Threads数组,但我不确定如何将每个新线程添加到数组中,或者即使这是正确的方向。
答案 0 :(得分: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 :(得分:0)
这听起来不错,你需要一个线程列表。由于您将从多个线程访问列表/数组,因此可以使用其中一个线程安全列表类,或者使用同步的“addThread(Thread newlyCreatedThread)”方法。希望这有帮助!
答案 2 :(得分:0)
您可以在主应用程序线程中创建一个新的ThreadGroup对象,然后使所有生成的线程成为它的成员。当你试图让它们回来时,你只需要警惕ThreadGroup上枚举方法的古怪语义。 (仔细阅读javadoc!)
无论如何加入他们的目的是什么?只是想知道他们是否已经完成了?也许学习使用接口在Java中实现Delegate模式会有所帮助。