자바에서 병렬 스레드 세트를 실행하려고합니다. 다음과 같이 고차 함수를 통해 이들을 생성합니다.자바에서 다중 병렬 스레드가 종료되지 않습니다
public static void parallelizedMap(Consumer<String> f, List<String> list, int count) {
List<List<String>> parts = new ArrayList<List<String>>();
final int N = list.size();
int L = N/(count - 1);
for (int i = 0; i < N; i += L) {
parts.add(new ArrayList<String>(list.subList(i, Math.min(N, i + L))));
}
for (List<String> e : parts) {
Runnable r = new Runnable() {
public void run() {
e.forEach(f);
}
};
new Thread(r).start();
}
}
이 메서드는 몇 분마다 호출됩니다. 몇 분 후에 수백 개의 스레드를 생성합니다. 모든 스레드는 20 초 동안 만 실행됩니다. 하지만 내 디버깅은 종료 결코 것으로 나타났다 및 그 난이 예외 얻을 : 사전
* 모든 스레드는 20 초 동안 만 실행됩니다. 하지만 디버깅을하면 절대로 끝내지 않는 것으로 나타났습니다. *이 문장은 서로 모순됩니다. 그리고'f'가하는 일을 볼 수 없으므로 많은 도움을주기가 어렵습니다. – shmosel
몇 가지 조언 : 의미있는 변수 이름을 사용하십시오! 또한 완전한 예제를 제공하십시오. –
디버거를 사용하는 경우 완료해야하지만 실행하지 않은 스레드를 일시 중단하고 어떤 문이 중단되는지 확인합니다. –