ForkJoin 및 FixedSizeThreadPool에서 내 문제의 두 가지 구현을 만들었으며 그 성능을 비교하려고합니다. 내 문제는 각 작업이 몇 가지 하위 작업을 만들어 실행자 서비스에 다시 제출합니다. 포크 - 조인 구현에서는 fork()를 사용하고 다른 하나에서는 execute()를 사용합니다.Java의 fork-join이 아닌 실행자 서비스에 isQuiescent가 있습니까?
물론 내 주 스레드는 전체 작업이 끝날 때까지 기다려야합니다. 포크 - 조인에서는 isQuiescent() 속성을 검사하여 모든 작업이 완료되었는지 확인할 수 있지만, 다른 경우에는 수동으로 작성한 작업 수와 완료된 작업 수를 수동으로 계산하는 것보다 더 좋은 것으로 생각할 수 없습니다! 이 솔루션은 작동하지만 분명히 성능을 저하시키는 공유 변수를 사용합니다.
하위 작업이 예약되지 않기 때문에 (즉, RejectedExecutionException이 발생하기 때문에) shutdown()을 사용할 수 없습니다.
누구나 작업을 계산하는 것보다 더 좋은 해결책을 알고 있습니까?
답장을 보내 주셔서 감사합니다.하지만이 문제가 어떻게 해결되는지 즉시 알 수 없습니다. null을 반환 할 때까지 take()를 반복하여 호출해야합니까? – Mahdi
정확히 :) invokeAll을 호출하고 Future.get()을 호출 할 수 있지만 take()가 더 잘 작동한다는 것을 알았습니다. 특히 벤치마킹을 검토 할 때 더욱 그렇습니다. 그렇게하면 개별 작업에 대한 통계도 얻을 수 있습니다. –
각 작업이 하위 작업을 마치기 때문에 Future.get()이 제대로 작동하지 않습니다. 나는 take()가 작동하는지 확인하려고 노력할 것입니다 ... 당신의 대답을 위해 다시 한번 감사드립니다 ... – Mahdi