์ด์ ์๋ ์๋์ ๊ฐ์ด ์๋น์ค ๋จ์์ ๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ try/catch ๋ฌธ์ ์ฌ์ฉํ์ฌ RejectedExecutorException์ ๋ํ ๋ฐฉ์ด๋ก์ง์ ์ถ๊ฐํ์๋ค.
์ด๋ฌํ ์ฌ์ค์ ์๊ฒ๋๊ณ ํ์ฌ์ ๊ณต์ ํ์๋๋ฐ ์ ๊ธฐํ ์ฌ์ค์ ์๊ฒ๋์๋ค.
try/catch๋ฌธ์ผ๋ก ๋ฐฉ์ด๋ก์ง์ ์ถ๊ฐํด์ฃผ์ง ์์๋ AsyncConfig์์ RejectedExecutorException์ ๋ํ ๋์ ์ฒ๋ฆฌ๋ฅผ ์ค์ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๋ฐ๋ก ์ด๋ ๊ฒ ๋ง์ด๋ค ..
setRejectedExecutionHandler : RejectedExecution ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง์ ๋ํ ์ต์ ์ด๋ค.
new ThreadPoolExecutor์์ ํธ์ถํ๋ ๋ฉ์๋๋ 4๊ฐ์ง๊ฐ ์๋ค.
- AbortPolicy : ๋ํดํธ๊ฐ. RejectedExecutionException์ ๋ฐ์์ํจ๋ค.
- DiscardOldestPolicy : ์ค๋๋ ์์ ์ ๋ฌด์ํ๋ค.
- DiscardPolicy : ์ฒ๋ฆฌํ๋ ค๋ ์์ ์ ๋ฌด์ํ๋ค.
- CallerRunsPolicy : shutdown ์ํ๊ฐ ์๋ ๋, ThreadPoolTaskExecutor์ ์์ฒญํ thread์์ ๋ค๋ฅธ thread์ ์์ํ์ง ์๊ณ ์ง์ ์ฒ๋ฆฌํ๋ค.
์ฆ, ์์ฒญํ ์ฐ๋ ๋๊ฐ ๋ฉ์ธ์ฐ๋ ๋์๋ค๋ฉด ๋ค๋ฅธ ์ฐ๋ ๋์ ์์ํ์ง ์๊ณ ๋ฉ์ธ์ฐ๋ ๋๊ฐ ์ง์ ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์ด๋ค.
=> ์ฐ๋ ๋ํ์ด ๋ค ์ฐผ์ ๋ ์์ฒญํ ์ฐ๋ ๋์์ ๋๊ธฐ๋ก ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์ด๋ค.
์คํ
์ฐ๋ ๋ํ์ด ๋ค ์ฐผ์ ๋ ์ ๋ง RejectedExecutorException์ด ๋ฐ์ํ ์ํฉ์์ exception์ด ๋ฐ์ํ์ง ์๊ณ ๋๊ธฐ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๋์ง ์คํ์ ์งํํด๋ณด์๋ค.
1๏ธโฃ ์๋ฌด๋ฐ ์กฐ์น๋ฅผ ํ์ง ์์์ ๋ (AbortPolicy())
๊ฒฐ๊ณผ
RejectedExecutorException์ด ๋ฐ์ํ์์. (try/catch ๋ฌธ์ผ๋ก ๋ฐฉ์ด๋ก์ง ์ถ๊ฐํ ์ํ)
2๏ธโฃ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); ์ฌ์ฉํ์ ๋
๊ฒฐ๊ณผ
RejectedExecutorException์ด ๋ฐ์ํ์ง ์๊ณ ์์ฒญ์ด ์ฒ๋ฆฌ ์๋ฃ๋จ. (์์ฒญํ ์ฐ๋ ๋์์ ๋๊ธฐ๋ก ์ฒ๋ฆฌ๋์์)