2014-02-26 4 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

해답을 제공해 주셔서 감사합니다. 그러나, 나는 Alexei의 해결책을 계속했다. –

+0

예, 깨끗한 솔루션입니다. –

관련 문제