사용자 도구

사이트 도구


java:concurrent:executorservice

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
java:concurrent:executorservice [2018/04/25 15:25]
kwon37xi [ThreadPoolExecutor]
java:concurrent:executorservice [2020/08/07 13:53] (현재)
kwon37xi
줄 69: 줄 69:
   * reject : Executor가 shutdown 상태이거나, queue와 maximum size가 정해져 있을 경우 이것이 꽉 차면 ''execute(Runnable)''가 reject 된다. 이 때  ''RejectedExecutionHandler.rejectedExecution(Runnable, ThreadPoolExecutor)''가 호출된다.   * reject : Executor가 shutdown 상태이거나, queue와 maximum size가 정해져 있을 경우 이것이 꽉 차면 ''execute(Runnable)''가 reject 된다. 이 때  ''RejectedExecutionHandler.rejectedExecution(Runnable, ThreadPoolExecutor)''가 호출된다.
   * ''corePoolSize=0'', ''maximumPoolSize=Integer.MAX_VALUE'', ''keepAliveTime=60sec'', **''queueCapacity=0''** 으로 지정하면 ''Executors.newCachedThreadPool()'' 설정.   * ''corePoolSize=0'', ''maximumPoolSize=Integer.MAX_VALUE'', ''keepAliveTime=60sec'', **''queueCapacity=0''** 으로 지정하면 ''Executors.newCachedThreadPool()'' 설정.
 +
 +===== ExecutorCompletionService =====
 +  * [[https://dzone.com/articles/executorcompletionservice|ExecutorCompletionService in Practice - DZone Java]]
 +  * 여러개의 ''Future''를 submit 한 상황에서 빨리 실행되는대로 값을 반환받아 사용할 수 있게 해준다.
 +  * [[java:8:completable_future|Java 8 CompletableFuture]]를 사용한다면 불필요해보인다.
 +
 +<code java>
 +final ExecutorService pool = Executors.newFixedThreadPool(5);
 +
 +// 응답 타입(String) 명시 필요
 +final ExecutorCompletionService<String> completionService = new ExecutorCompletionService<>(pool);
 +
 +for (final String site : topSites) {
 +    completionService.submit(new Callable<String>() {
 +        @Override
 +        public String call() throws Exception {
 +            return IOUtils.toString(new URL("http://" + site), StandardCharsets.UTF_8);
 +        }
 +    });
 +}
 +
 +// submit 한 갯수가 정확해야한다.
 +for(int i = 0; i < topSites.size(); ++i) {
 +    final Future<String> future = completionService.take(); // 먼저 실행되는 대로 바로 리턴
 +    try {
 +        final String content = future.get();
 +        //...process contents
 +    } catch (ExecutionException e) {
 +        log.warn("Error while downloading", e.getCause());
 +    }
 +}
 +</code>
java/concurrent/executorservice.txt · 마지막으로 수정됨: 2020/08/07 13:53 저자 kwon37xi