문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
java:concurrent:executorservice [2018/03/06 10:18] kwon37xi [ThreadPoolExecutor] |
java:concurrent:executorservice [2020/08/07 13:53] (현재) kwon37xi |
||
|---|---|---|---|
| 줄 58: | 줄 58: | ||
| * 대표적인 Thread Pool? | * 대표적인 Thread Pool? | ||
| * [[https:// | * [[https:// | ||
| - | * Spring의 | + | * [[springframework:async|Spring @Async]]가 사용한다. |
| * '' | * '' | ||
| * '' | * '' | ||
| 줄 64: | 줄 64: | ||
| * 여기서 매우 중요한 점은 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(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||