2011-08-03 4 views

답변

3

우리는 유스 케이스에 대해 아무것도 모르기 때문에 귀하의 질문에서 최상의 접근법을 말하는 것은 불가능합니다! 그러나 일반적으로 Executors.newFixedThreadPool()을 사용하여 스레드 풀을 만든 다음 스레드 풀에 Callable<T> 일반 객체를 제출하면 Future<T>이 반환됩니다.

메인 스레드에서 미래의 루프를 수행하여 get() 메서드 각각을 호출 할 수 있습니다.이 메서드는 해당 호출 가능 함수가 스레드 풀에서 실행을 완료 할 때까지 차단됩니다.

+1

+1 동시성 실행자 사용시. –

0

Java에서 스레드의 시작 및 중지의 우선 순위는 보장되지 않습니다. 일부 스레드는 I/O를 기다리고 있기 때문에 다른 스레드로 향하기 위해 대기 모드로 전환 될 수 있습니다.

다음은 내가 원했던 몇 가지 질문입니다 - 루프를 사용하여 동시에 스레드를 시작하십시오. 나는이 무엇인지 모르는

Why is it that threads 10000 start() calls take more time than 10000 run() calls?

0

은 requirements.But 내가 당신을 줄 수있는 작은 경로입니다. 각 스레드에 대해 고유 한 ID를 생성하고 해당 ID를 null 값 필드 (어딘가에)에 넣을 수 있습니다. 생성 된 스레드가 자신이 속한 테이블 (ID)을 업데이트하도록 만듭니다. 그러면 값이 업데이트되었는지 확인할 수 있습니다. 가치를 얻으십시오.

1

주 스레드에서 스레드를 만들 때 해당 스레드에 대한 참조를 유지하고 이러한 참조를 통해 데이터를 가져올 수 있습니다. 의사 코드는 다음과 같습니다 List의 모든 유형 대신 고정 된 크기의 배열로 사용할 수

int nSize = <some nomber>; 
MyThread myThreadArray[] = new MyThread[nSize]; 

for(int i = 0; i < nSize; i++) { 
    myThreadArray[i] = new MyThread(); 

    // Init and start the thread. 
} 

// Wait for all thread to end. 

for(int i = 0; i < nSize; i++) { 
    myThreadArray[i].getData(); 
} 

.

편집/추가 :

자식 스레드를 생성 할 때 자식 스레드에서 데이터를 유지하는, 당신은 또한 메인 쓰레드에 할당하고 그것에 대한 참조를 줄 수있는 대신에 :

int nSize = <some nomber>; 
MyThreadData myThreadDataArray[] = new MyThreadData[nSize]; 

for(int i = 0; i < nSize; i++) { 
    Thread thread = new MyThread(myThreadDataArray[i]); 

    // Init and start the thread. 
} 

// Wait for all thread to end. 

for(int i = 0; i < nSize; i++) { 
    // Do something with myThreadDataArray[i]. 
} 

이렇게하면 스레드 종료 후 오랫동안 스레드 데이터로 작업해야하는 경우 gc가 Thread 개체를 더 빨리 회수 할 수 있습니다.

관련 문제