문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
java:concurrent:executorservice [2016/09/17 15:38] kwon37xi |
java:concurrent:executorservice [2020/08/07 13:53] kwon37xi |
||
---|---|---|---|
줄 5: | 줄 5: | ||
* [[http:// | * [[http:// | ||
* [[https:// | * [[https:// | ||
+ | * [[http:// | ||
===== 최적의 쓰레드 풀 수 ===== | ===== 최적의 쓰레드 풀 수 ===== | ||
줄 57: | 줄 58: | ||
* 대표적인 Thread Pool? | * 대표적인 Thread Pool? | ||
* [[https:// | * [[https:// | ||
- | * Spring의 | + | * [[springframework:async|Spring @Async]]가 사용한다. |
* '' | * '' | ||
* '' | * '' | ||
+ | * '' | ||
* 여기서 매우 중요한 점은 Pool을 늘리는 규칙이다. 이 규칙을 잘 못 이해하면 corePoolSize 만큼의 pool 밖에 안 만들어진다. | * 여기서 매우 중요한 점은 Pool을 늘리는 규칙이다. 이 규칙을 잘 못 이해하면 corePoolSize 만큼의 pool 밖에 안 만들어진다. | ||
+ | > A ThreadPoolExecutor will automatically adjust the pool size (see getPoolSize()) according to the bounds set by corePoolSize (see getCorePoolSize()) and maximumPoolSize (see getMaximumPoolSize()). When a new task is submitted in method execute(Runnable), | ||
+ | > corePoolSize 만큼의 쓰레드가 만들어져 있으면, 그 다음 쓰레드는 queueCapacity만큼 큐에 쌓여 있다가 corePool로 실행이 인입된다. 따라서 corePoolSize가 작고 queueCapacity가 매우 크면 queue가 꽉차기 전까지는 실제로 쓰레드 풀이 확장되지 않고 계속해서 corePool 만 재사용하게 된다. | ||
+ | |||
+ | * reject : Executor가 shutdown 상태이거나, | ||
+ | * '' | ||
+ | |||
+ | ===== ExecutorCompletionService ===== | ||
+ | * [[https:// | ||
+ | * 여러개의 '' | ||
+ | * [[java: | ||
+ | |||
+ | <code java> | ||
+ | final ExecutorService pool = Executors.newFixedThreadPool(5); | ||
+ | |||
+ | // 응답 타입(String) 명시 필요 | ||
+ | final ExecutorCompletionService< | ||
+ | |||
+ | for (final String site : topSites) { | ||
+ | completionService.submit(new Callable< | ||
+ | @Override | ||
+ | public String call() throws Exception { | ||
+ | return IOUtils.toString(new URL(" | ||
+ | } | ||
+ | }); | ||
+ | } | ||
+ | |||
+ | // submit 한 갯수가 정확해야한다. | ||
+ | for(int i = 0; i < topSites.size(); | ||
+ | final Future< | ||
+ | try { | ||
+ | final String content = future.get(); | ||
+ | // | ||
+ | } catch (ExecutionException e) { | ||
+ | log.warn(" | ||
+ | } | ||
+ | } | ||
+ | </ |