자바 비동기 프로그래밍

이규훈·2024년 5월 11일

비동기 -> Async한 통신
실시간성 응답을 필요하지 않은 경우
ex) 이메일 전송, 알림 전송 ,푸쉬알림

개발자 답게 -> Main Thread가 아닌 Sub Thread한테 위임

Java에서는 ThreadPool을 생성하여 처리

쓰레드 풀 생성 옵션

  1. corePoolSize
    스레드 풀에 최소한의 스레드을 얼마나 가질건지
  2. maximumPoolSize
    최대의 스레드 몇개까지 할당할건지
  3. workQueue
    여러 요청들이 들어오면 자료구조 큐를 사용하여 요청을 담아두다가 처리
  4. KeepAliveTime
    지정한 시간 만큼 이 스레드가 일을 하지 않으면 자원을 반납을 하겠다라는 옵션

순서

코어풀 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 )
 	요청 거절
    

    
profile
개발취준생

0개의 댓글