람다 표현식은 메모리와 같은 특정 양의 리소스를 소비한다고 가정하고 동시 실행 수 (예 : 람다가 로컬 메모리의 100MB를 일시적으로 소비하고이를 1GB로 제한하려는 경우 10 개의 동시 평가를 허용하지 않습니다).병렬 스트림에서의 동시 평가 (fixedThreadPool과 같은)의 수를 제한하는 최선의 방법은 무엇입니까?
동시 실행의 수를 제한 할 수있는 가장 좋은 방법은 무엇입니까,
IntStream.range(0, numberOfJobs).parallel().foreach(i -> { /*...*/ });
, 예를 들어 말을?
참고 : 확실한 옵션은
double jobsPerThread = (double)numberOfJobs/numberOfThreads;
IntStream.range(0, numberOfThreads).parallel().forEach(threadIndex ->
IntStream.range((int)(threadIndex * jobsPerThread), (int)((threadIndex+1) * jobsPerThread)).sequential().forEach(i -> { /*...*/ }));
이 유일한 방법입니다 같은 중첩을 수행하는 것입니다? Tt는 이 아니며 우아한입니다. 사실은 내가 쉽게 할 수있는 CompletableFuture
유틸리티 방법을 사용하여, 사용 사례에 따라,
IntStream.range(0, numberOfJobs).parallel(numberOfThreads).foreach(i -> { /*...*/ });
왜 당신이 공유 고정 스레드 풀을 사용할 수 없습니다 : 다음 예는
2
의 고정 병행 한 번 동일한 작업을 실행하는 기본 동작을 사용하여 한 번 사용자 정의 풀을 사용하여이 보여? 평행 한 시내는 무엇을 복잡하게합니까? – GrayJava 6에서는 공유 된 고정 스레드 풀을 사용했지만 Java 8 코드는 훨씬 간결합니다. 스레드 풀을 사용하면 Future의 ArrayList를 정의하고 Executor에게 작업자를 제출하고 Futures에서 결과를 수집해야합니다. 이것이 주된 동기이지만, 스트림이 더 효율적이라는 인상을 받았습니다 (약 10 % 정도). –
http://stackoverflow.com/questions/21163108/custom-thread-pool-in-java-8-parallel-stream –