๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ด์ „์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„œ๋น„์Šค ๋‹จ์—์„œ ๋น„๋™๊ธฐ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ 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์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ์š”์ฒญ์ด ์ฒ˜๋ฆฌ ์™„๋ฃŒ๋จ. (์š”์ฒญํ•œ ์“ฐ๋ ˆ๋“œ์—์„œ ๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ)