2011-12-29 7 views
-1

1K 스레드를 생성하고 래치를 사용하여 스레드를 시작하면 스레드가 내 프로세스의 완료를 완료합니다.완료 할 때 1K 스레드를 시작하고 동일한 작업에서 스레드를 계속 실행하는 방법

스레드가 끝날 때 동일한 작업을 수행 할 다른 스레드를 시작합니다 (또는 동일한 스레드를 다시 가져 와서 같은 작업을 계속 처리합니다).

시나리오 :

내가 1K 스레드를 시작하려면, 그들이 처리를 완료 할 때 다른 1K 스레드를 시작하는 성능 저하를 원하지 않는다.

스레드는 단순히 내가 지속적으로 x 초 동안 실행되고 싶은 어떤 URL http://www.example.com/some/page

에 HTTP URL에 접속을하고, 항상 실행 1K 스레드를 가지고있다.

실행기 프레임 워크가 작업과 스레드를 분리하므로 실행하는 방법을 배울 때 실행기를 사용하지 않으려 고합니다. 실행중인 스레드의 수를 계산하지 않습니다. 동시.

+9

1,000 개의 스레드를 만드는 것은 결코 좋은 생각이 아닙니다. – SLaks

+0

@SLaks 벤치마킹을 위해 벤치마킹 도구를 만드는 방법을 배우고 싶습니다. – codecompleting

+1

많은 개별 스레드를 작성하는 것은 아마도 사용자가 생각하는대로 수행하지 않을 것이므로 1000 개의 동시 요청을 실행하는 더 나은 방법이있을 것입니다. 당신은 대부분의 시간을 기다리고있는 1000 개의 스레드를 돌리고 있습니다. –

답변

1

루프를 run() 방법으로 사용하십시오.

1

내가 알 수있는 것처럼 많은 수의 서버 스레드가 있고 목록에서 작업을 실행 한 다음 돌아와서 다른 작업이 지정 될 때까지 기다려야합니다. 목록에있는 이미 존재하는 다른 부분).

대기열을 사용하는 사람입니다. 아마도 BlockingQueue는 사용 목적에 맞는 가장 간단한 형식이며, JDK에서 이에 대한 구현이 몇 가지 있습니다.

+0

아니요. 계속해서 x 초 동안 URL을 계속 누르고 싶습니다. (질문에서 언급했습니다.) – codecompleting

+0

그러면 원하는 것이 'while (TRUE)'루프 인 것 같습니다. –

2

Runnable 자체에서 수행해야합니다. 액션을 둘러싼 간단한 루프를 만듭니다. 특정 시점에 이들 모두를 동기화하려면 개수가 1000 인 CountdownLatch를 만들고 모든 반복 끝에 countDown을 수행하고 기다립니다.

Apache JMeter은 여러 스레드에서 URL을 테스트하도록 쉽게 구성 할 수있는 무료 성능 테스트 도구입니다. 또한 테스트를 배포하여 예를 들어 대신 100 개의 스레드를 수행하는 10 개의 클라이언트.