(2) Random v.s. ThreadLocalRandom
About
๋ฐ๋ก ์ด์ ๊ธ (1) Math.random() v.s. Random์์ java.lang.Math.random()
๊ณผ java.util.Random
์ ์ฐจ์ด๋ฅผ ์์๋ณด์๋ค. ๋ ์ค์์๋ ํ์๋ฅผ ์ฐ์๋ ๊ฒ์ผ๋ก ๊ฒฐ๋ก ์ ๋ด๋ ธ๋๋ฐ, Random
๋ ์ฑ๋ฅ ์์ ๋ฌธ์ ๊ฐ ์๋ค. ์ด๋ฒ์ ThreadLocalRandom
์ ์์๋ณด์.
java.util.Random
Java 1.0๋ถํฐ ์กด์ฌํ๋ค. Thread-safeํ์ง๋ง ์ฌ๋ฌ ์ฐ๋ ๋์์ ๋์ ์ ๊ทผํ๋ฉด ๊ฒฝํฉ์ด ๋ฐ์ํ์ฌ ์ฑ๋ฅ์ด ์ ํ๋๋ค.
java.util.concurrent.ThreadLocalRandom
ThreadLocalRandom
์ ์ฐ๋ ๋๋ณ๋ก ๊ฒฉ๋ฆฌ๋ ๋์์์ฑ๊ธฐ(Random Number Generator)์ด๋ค.
Random
๋ thread-safeํ๊ณ ThreadLocalRandom
๋ thread-safeํ์ง๋ง ์ด์ ๊ฐ ๋ค๋ฅด๋ค.
Random
์ seed๋ฅผAtomicLong
์ ์ฌ์ฉํ๋ฏ๋ก, ๋ฉํฐ์ฐ๋ ๋ ์์ฒญ์ ๋ํด์๋ ์์๋๋ก ์ฒ๋ฆฌํด ๋ง์น ๋๊ธฐํ(synchronized) ์ฒ๋ฆฌ์ฒ๋ผ ๋์ํ๊ธฐ ๋๋ฌธ์ ๋๋ฆฌ๋ค. (๋๊ธฐํ ๋ฐฉ์์ฒ๋ผ ๋์ํ๋ฏ๋ก thread-safeํ๋ค.)ThreadLocalRandom
์AtomicLong
์ ์ฌ์ฉํ์ง ์๊ณ , ์ฐ๋ ๋๋ณ๋ก seed๊ฐ์ ๋ค๋ฅด๊ฒ ๊ด๋ฆฌํ๋ฏ๋กRandom
๋ณด๋ค ์ฐ๋ ๋์ ๋ํด ์๋ต์ด ๋น ๋ฅด๊ณ thread-safeํ๋ค.
๊ฒฐ๋ก : JDK 7๋ถํฐ Random
์ ์ฌ์ฉํ ํ์๊ฐ ์๋ค. ThreadLocalRandom
์ ์ฐ๋ฉด ๋๋ค.
Code
+ java.util.SplittableRandom
SplittableRandom
์ ๊ฒฉ๋ฆฌ๋ ๋ณ๋ ฌ์ฒ๋ฆฌ์ ํนํ๋ ๋์์์ฑ๊ธฐ์ด๋ค.
Thread-safeํ์ง ์์ผ๋ฏ๋ก ์ฃผ์๊ฐ ํ์ํ๋ค.
ํน์ ์ํฉ์์๋
ThreadLocalRandom
๋ณด๋ค ์ ๋ฆฌํ๋ค.ํด๋น ๋ด์ฉ์ REF๋ฅผ ์ฐธ๊ณ ํ์.
More on the matter
REF
dveamer - Java Random - ThreadLocalRandom, SplittableRandom, SecureRandom
์ ๋ฆฌ๊ฐ ๋งค์ฐ ์ ๋ ๊ธ์ด๋ค. ๋ชจ๋ ํต์ฌ ๋ด์ฉ์ ์ฌ๊ธฐ์ ์ฐธ๊ณ ํ๋ค.
Last updated