비동기 -> Async한 통신
실시간성 응답을 필요하지 않은 경우
ex) 이메일 전송, 알림 전송 ,푸쉬알림
개발자 답게 -> Main Thread가 아닌 Sub Thread한테 위임
Java에서는 ThreadPool을 생성하여 처리
코어풀 3개 설정
요청 4개 들어옴
워크큐에 요청들을 담아둠 그 워크큐 사이즈 만큼 새로운 요청들을 계속해서 담다가 요청이 다 쌓이면 맥시험 풀 사이즈만큼 더 생성한다.
코어풀 만큼 스레드 생성 -> 큐에 테스크 담기 -> 큐가 다 차면 그 다음에 맥시멈 풀 사이즈 만큼 새로운 스레드를 생성
ThreadPoolExcutor executorPool = new ThreadPoolExcutor(5,10,3,TimeUnit.Seconds, new ArrayBlockingQueue<Runnalble>(50));
-> 최고 5개 쓰레드 담고, 큐에 태스크 다 쌓이면 10개까지 쓰레기 생성하고 6번째부터 10번째 쓰레드까지는 3초 동안 일하지않으면 다시 반납 될 것이고, 큐에는 50개까지의 테스크가 담길 것이다.
코어풀사이즈값 너무 크면 side effect 발생 가능
Exception
코어풀사이즈가 0보다 작을 경우
keepaliveTime이 0보다 작음
맥시점풀사이즈가 0보다 작거나 코어풀 보다 작을 경우
workQueue가 null일 경
if(Thread 수 < CorePoolSize )
new Thread 생성
if(Thread 수 > CorePoolSize )
Queue에 요청 추가
if( Queue FUll && Thread 수 < MaxPoolSize )
new Thread 생성
if( Queue FUll && Thread 수 > MaxPoolSize )
요청 거절