2022-07-04 TIL
ThreadLocal
ThreadLocal
์ ํด๋น Thread๋ง ์ ๊ทผํ ์ ์๋ ํน๋ณํ ์ ์ฅ์๋ฅผ ๋งํ๋ค. ์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ๋ฌผ๊ฑด ๋ณด๊ด ์ฐฝ๊ตฌ๋ฅผ ๋ ์ฌ๋ฆฌ๋ฉด ๋๋ค. ์ฌ๋ฌ ์ฌ๋์ด ๋ฌผ๊ฑด ๋ณด๊ด ์ฐฝ๊ตฌ๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์ฐฝ๊ตฌ ์ง์์ ์ฌ์ฉ์๋ฅผ ์ธ์ํด์ ์ฌ์ฉ์๋ณ๋ก ํ์คํ๊ฒ ๋ฌผ๊ฑด์ ๊ตฌ๋ถํด์ค๋ค. ์ฌ์ฉ์A, ์ฌ์ฉ์B ๋ชจ๋ ์ฐฝ๊ตฌ ์ง์์ ํตํด์ ๋ฌผ๊ฑด์ ๋ณด๊ดํ๊ณ ๊บผ๋ด์ง๋ง ์ฐฝ๊ตฌ ์ง์์ด ์ฌ์ฉ์์ ๋ฐ๋ผ ๋ณด๊ดํ ๋ฌผ๊ฑด์ ๊ตฌ๋ถํด์ฃผ๋ ๊ฒ์ด๋ค.
ThreadLocal
์ ์ฌ์ฉํ๋ ์ด์ ๋ ๊ฐ Thread๋ง๋ค ๋ณ๋์ ๋ด๋ถ ์ ์ฅ์๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ธ์คํด์ค์ ThreadLocal ํ๋์ ์ ๊ทผํด๋ ๋์์ฑ ์ด์๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
ThreadLocal
์ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋๋ thread-A
๊ฐ ์กฐํํ๋ฉด ThreadLocal์ thread-A
์ ์ฉ ๋ณด๊ด์์์ ๋ณด๊ดํ๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ณ , thread-B
๊ฐ ์กฐํํ๋ฉด thread-B
์ ์ฉ ๋ณด๊ด์์์ ๋ณด๊ดํ๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค. ๊ทธ๋ฌ๊ธฐ ์ฝ์ง ์๊ฒ ์ง๋ง ์ ๋ง ์ ํํ๊ฒ ๋์์ ์์ฒญํด๋ ์๋ก ๋ณด๊ดํ๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํด์ค๋ค.
ThreadLocal
์ ์ฌ์ฉํ๋ฉด์ ํ ๊ฐ์ง ์ฃผ์ํ ์ ์ด ์๋ค๋ฉด ThreadLocal
์ ๋ชจ๋ ์ฌ์ฉํ๊ณ ๋๋ฉด ThreadLocal.remove()
๋ฅผ ํธ์ถํด์ ํด๋น ์ค๋ ๋๊ฐ ThreadLocal
์ ์ ์ฅํ ๊ฐ์ ๋ชจ๋ ์ ๊ฑฐํด์ค์ผ ํ๋ค! ๋ง์ฝ ์ ๊ฑฐํด์ฃผ์ง ์์ผ๋ฉด ThreadPool
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ Thread๊ฐ ์์
์ ๋ง์น๋๋ผ๋ Thread๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ (Thread ์์ฑ ๋น์ฉ์ด ๋น์ธ๊ธฐ ๋๋ฌธ์) ํด๋น Thread๊ฐ ์ฌ์ฌ์ฉ๋ ๋, ํด๋น Thread์ ์๊ด ์๋ ๊ฐ์ด ThreadLocal
์ ์์ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ThreadLocal
์ ์ฌ์ฉ ํ์ ์ ์ฅ๋ ๊ฐ์ ๋ฐ๋์ ์ ๊ฑฐํด์ค์ผ ํ๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ