我目前正在研究某個課程的某些代碼。我不能發佈代碼,但我可以談論一些我正在努力的高級概念並接受他們的輸入。基本上,代碼是一個無向圖上的遞歸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. 如何跟蹤遞歸make?
- 5. 角遞歸NG-包括同時跟蹤遞歸深度的
- 6. 在python中創建遞歸線程
- 7. 如何跟蹤遞歸深度?
- 8. 基本Prolog的遞歸跟蹤
- 9. 跨遞歸函數跟蹤狀態
- 10. Git LFS跟蹤文件夾遞歸地
- 11. 在OOP中跟蹤遞歸調用
- 12. 跟蹤ocaml的遞歸函數
- 13. 跟蹤遞歸硬幣更改算法
- 14. 跟蹤執行線程
- 15. 跟蹤線程失敗
- 16. 多線程跟蹤進度
- 17. 實時光線跟蹤器
- 18. MVC4在線跟蹤時間
- 19. 曲線跟蹤
- 20. 如何跟蹤這個C遞歸程序
- 21. 遞歸追蹤
- 22. 使用光線跟蹤並行線程
- 23. 多線程光線跟蹤噪聲
- 24. 遞歸創建樹
- 25. 如何創建Web部件以跟蹤頁面創建時間
- 26. 如何創建Web部件來跟蹤頁面創建時間
- 27. 如何創建一個Android GPS實時跟蹤應用程序?
- 28. 只跟蹤同一類型的消息和線程跟蹤 - C#
- 29. 通過引用參數傳遞跟蹤遞歸算法
- 30. 使用多線程和遞歸創建樹
謝謝。所以像ArrayBlockingQueue可能是一個好主意?我沒有想到我的列表是線程安全的。 – 66replica 2010-05-04 23:43:56
BlockingQueue是傳遞信息的線程安全方式。你的清單是否在中期迭代?如果沒有,那麼你不需要擔心你如何分配工作的線程安全。線程正在運行的線程安全,是的。 – bwawok 2010-05-05 02:08:23