Thread Local
Java Thread Local์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๊ฐ ์ค๋ ๋์์ ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ง๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ ์ค๋ ๋์์ ๊ณต์ ๋๋ ๊ฐ์ฒด์ ๋ํ ๋์ ์ ๊ทผ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
Thread Local์ ์ฌ์ฉํ๋ ค๋ฉด java.lang ํจํค์ง์ ThreadLocal ํด๋์ค๋ฅผ ์ด์ฉํด์ผ ํฉ๋๋ค. ๊ฐ ์ค๋ ๋์์ ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ง๋๋ก ํ๋ ค๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ค์, ThreadLocal ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ํด๋น ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ฉด ๋ฉ๋๋ค.
์์ ์ฝ๋์์๋ MyThreadSafeClass ํด๋์ค ๋ด๋ถ์์ ThreadLocal ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ Integer ๊ฐ์ ์ ์ฅํฉ๋๋ค. initialValue() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ, ์ค๋ ๋๊ฐ ๊ฐ์ ์ฒ์์ผ๋ก ์ ๊ทผํ ๋ 0์ ๋ฐํํ๋๋ก ์ค์ ํฉ๋๋ค.
incrementValue() ๋ฉ์๋๋ Thread Local์ ์ ์ฅ๋ ๊ฐ์ ์ฆ๊ฐ์ํค๊ณ , getValue() ๋ฉ์๋๋ Thread Local์ ์ ์ฅ๋ ๊ฐ์ ๋ฐํํฉ๋๋ค. ์ด๋ ๊ฒ ๊ตฌํํ๋ฉด ์ฌ๋ฌ ์ค๋ ๋์์ MyThreadSafeClass ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ๋๋ผ๋ ๊ฐ ์ค๋ ๋์์๋ ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
ํ์ฉ ์์
Thread Local์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๋ง์ด ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ ์ค ํ๋์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ ์์ฒญ๋ง๋ค ๋ก๊ทธ์ธํ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์งํ๊ณ ์ถ์ ๋ Thread Local์ ํ์ฉํ ์ ์์ต๋๋ค.
์์ ์ฝ๋์์๋ UserContext ํด๋์ค ๋ด๋ถ์์ Thread Local์ ์ด์ฉํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. ๊ฐ ์์ฒญ๋ง๋ค UserContext.setUser() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ฉด, ํด๋น ์์ฒญ์์๋ UserContext.getUser() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
Java Thread Local์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๊ณต์ ๋ณ์์ ๋ํ ๋์ ์ ๊ทผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ์์ ์ ์ฉ
Last updated