2014-02-26 58 views
1

我想用Jmeter來測試應用程序。該應用程序使用創建多個線程的專有庫。在JMeter中,我創建了一個AbstractJavaSamplerClient,它似乎並未等待應用程序中可能生成的所有其他線程。相反,它只是運行自己的默認方法,並關閉其他線程在後臺運行 - 因爲我正在連接到應用程序中的服務器,所以我可以通過服務器日誌查看它是否仍處於連接狀態。由於我沒有對其他線程的引用,因爲它們是通過專有庫實例化的,所以我不能使用wait()或join()的通用解決方案。我怎樣才能讓主線程等待所有的線程(我也沒有參考)?Java在終止之前等待所有線程

回答

3

將所有使用庫的工作都放在專門創建的線程組的單獨線程中。該庫將在該線程組及其後代中創建新線程。用group.enumerate(new Thread[group.activeCount()*2],true)遞歸列出該組的所有線程。然後你可以加入()他們所有。

+1

使用'activeCount()* 2'的「訣竅」很好,但要正確,必須檢查枚舉的返回值是否嚴格小於給定長度(嚴格來說,如果它的大小完全相同,區分尺寸太小的情況與完全吻合的情況)。是的,這是一個尷尬的API使用。 – Voo

+0

謝謝工作得很好! –

1

您可以

Thread.getAllStackTraces().keySet(); 

啓動,這將給你一個集所有運行的線程。這將包括您對感興趣的所有其他線程,包括JVM內部的那些線程。

希望你能夠通過名稱篩選出你感興趣的人,然後你可以join()他們。

+0

感謝您的解決方案。但是,我繼續與阿列克謝的解決方案。 –

+0

是的,這是一個更清潔的解決方案。 –