같은 시간에 (루프에서) 여러 호출 가능한 스레드를 시작하고 주 스레드의 모든 사용자로부터 일부 정보를 반환하려고합니다. 이것을 실현하는 방법?여러 스레드에서 정보를 얻는 방법은 무엇입니까? Java
답변
우리는 유스 케이스에 대해 아무것도 모르기 때문에 귀하의 질문에서 최상의 접근법을 말하는 것은 불가능합니다! 그러나 일반적으로 Executors.newFixedThreadPool()
을 사용하여 스레드 풀을 만든 다음 스레드 풀에 Callable<T>
일반 객체를 제출하면 Future<T>
이 반환됩니다.
메인 스레드에서 미래의 루프를 수행하여 get()
메서드 각각을 호출 할 수 있습니다.이 메서드는 해당 호출 가능 함수가 스레드 풀에서 실행을 완료 할 때까지 차단됩니다.
Java에서 스레드의 시작 및 중지의 우선 순위는 보장되지 않습니다. 일부 스레드는 I/O를 기다리고 있기 때문에 다른 스레드로 향하기 위해 대기 모드로 전환 될 수 있습니다.
다음은 내가 원했던 몇 가지 질문입니다 - 루프를 사용하여 동시에 스레드를 시작하십시오. 나는이 무엇인지 모르는
Why is it that threads 10000 start() calls take more time than 10000 run() calls?
은 requirements.But 내가 당신을 줄 수있는 작은 경로입니다. 각 스레드에 대해 고유 한 ID를 생성하고 해당 ID를 null 값 필드 (어딘가에)에 넣을 수 있습니다. 생성 된 스레드가 자신이 속한 테이블 (ID)을 업데이트하도록 만듭니다. 그러면 값이 업데이트되었는지 확인할 수 있습니다. 가치를 얻으십시오.
주 스레드에서 스레드를 만들 때 해당 스레드에 대한 참조를 유지하고 이러한 참조를 통해 데이터를 가져올 수 있습니다. 의사 코드는 다음과 같습니다 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
개체를 더 빨리 회수 할 수 있습니다.
- 1. 스레드에서 실행중인 코드에 대한 정보를 얻는 방법은 무엇입니까?
- 2. 프로세스 정보를 얻는 방법은 무엇입니까?
- 3. Java, Android의 Google 캘린더에서 일정에 대한 정보를 얻는 방법은 무엇입니까?
- 4. Linux에서 프로세스의 CPU 정보를 얻는 방법은 무엇입니까?
- 5. android에서 로그 정보를 얻는 방법
- 6. Java - 두 개의 WebContainer 스레드에서 여러 요청
- 7. listBox에서 선택된 파일 정보를 얻는 방법은 무엇입니까?
- 8. Realplayer 파일 정보를 얻는 방법은 무엇입니까?
- 9. WebContext에서 사용자 정보를 얻는 방법은 무엇입니까?
- 10. Windows에서 HDD의 현재로드 정보를 얻는 방법은 무엇입니까?
- 11. magento api에서 결제 정보를 얻는 방법은 무엇입니까?
- 12. 장치 네트워크 정보를 얻는 방법은 무엇입니까? (안드로이드)
- 13. GDB에서 프로세스 신호 정보를 얻는 방법은 무엇입니까?
- 14. 다른 AP의 비콘 정보를 얻는 방법은 무엇입니까?
- 15. Java AWT를 사용하여 정보를 표시하는 방법은 무엇입니까?
- 16. 여러 스레드에서 바이트 배열을 안전하게 채우는 방법은 무엇입니까?
- 17. EJB3를 사용하여 여러 스레드에서 데이터를 처리하는 방법은 무엇입니까?
- 18. Java : 여러 스레드에서 타이밍을 검색하는 가장 좋은 방법
- 19. 여러 스레드에서 Console.WriteLine 호출
- 20. 표준에서 정보를 얻는 방법?
- 21. 여러 클라이언트의 여러 ASP.NET 요청이 정보를 공유하는 방법은 무엇입니까?
- 22. 2D Java 배열에서 열을 얻는 방법은 무엇입니까?
- 23. 정보를 얻는 가장 좋은 방법은 xml입니까? sqlite?
- 24. 여러 나무에서 모든 조합을 얻는 방법은 무엇입니까?
- 25. 여러 httpd 스레드에서 변수를 레일스와 공유하는 방법은 무엇입니까?
- 26. CGPDFDocumentGetCatalog를 사용하여 PDF 장 정보를 얻는 방법은 무엇입니까?
- 27. MySQL 트리거에서 요청을 보내는 사용자에 대한 정보를 얻는 방법은 무엇입니까?
- 28. Nhibernate에서 런타임에 클래스 매핑 정보를 얻는 방법은 무엇입니까?
- 29. C++을 사용하여 Windows에서 하드웨어 정보를 얻는 방법은 무엇입니까?
- 30. 특정 이벤트를 클릭하면 Android에서 캘린더 일정 정보를 얻는 방법은 무엇입니까?
+1 동시성 실행자 사용시. –