์ฐ๋ ๋์ ๋๊ธฐํ
- ํ ์ฐ๋ ๋๊ฐ ํน์ ์์ ์ ๋๋ง์น๊ธฐ ์ ๊น์ง, ๋ค๋ฅธ ์ฐ๋ ๋์ ์ํด ๋ฐฉํด๋ฐ์ง ์์์ผ ํจ.
- ๋ฉํฐ์ฐ๋ ๋ ํ๋ก์ธ์ค๋ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๊ฐ์ ์์์ ๊ณต์ ํด์ ์์ ํ๋ฏ๋ก ์๋ก ์์ ์ ์ํฅ์ ์ค.
- ์๊ณ์์ญ : ๊ณต์ ๋ฐ์ดํฐ(์์)๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋ ์์ญ
- ๋ฝ : ์ ๊ธ, ๊ณต์ ๋ฐ์ดํฐ์ ๋ฝ์ ํ๋ํ ๋จ ํ๋์ ์ฐ๋ ๋๋ง ์๊ณ์์ญ ๋ด์ ์ฝ๋๋ฅผ ์ํํ ์ ์์.
- ๊ฐ์ฒด ๋จ์(๋ณ์๋ฌถ์, ๋ฐ์ดํฐ)๋ก ๋ฝ์ด ๊ฑธ๋ฆผ. ์ํ ํ์๋ lock์ ๋ฐ๋ฉํด์ผ ๋ค๋ฅธ ์ฐ๋ ๋ ์ํ์ด ๊ฐ๋ฅํจ.
- โ synchronized๋ฅผ ์ด์ฉํ ๋๊ธฐํ
- โกwait( )๊ณผ notify( )๋ฅผ ์ด์ฉํ ๋๊ธฐํ
- โขLock๊ณผ Condition์ ์ด์ฉํ ๋๊ธฐํ
์ฐ๋ ๋ ๋๊ธฐํ 3๊ฐ์ง ๋ฐฉ๋ฒ
synchronized
- โ ๋ฉ์๋ ์ ์ฒด๋ฅผ ์๊ณ์์ญ์ผ๋ก ์ง์
- ๋ฐํํ์ ์์ synchronized๋ถ์ด๊ธฐ
- โก ํน์ ํ ์์ญ์ ์๊ณ์์ญ์ผ๋ก ์ง์
- synchronized(๊ฐ์ฒด์ ์ฐธ์กฐ๋ณ์)
- ๋ ๋ฐฉ๋ฒ ๋ชจ๋ lock ํ๋๊ณผ ๋ฐ๋ฉ์ด ์๋์ ์ผ๋ก ์ด๋ฃจ์ด์ง.
- ๋ชจ๋ ๊ฐ์ฒด๋ lock์ ํ๋์ฉ ๊ฐ๊ณ ์์. ํด๋น ๊ฐ์ฒด์ lock์ ๊ฐ์ง๊ณ ์๋ ์ฐ๋ ๋๋ง ์๊ณ์์ญ์ ์ฝ๋๋ฅผ ์ํํ๊ณ ์์.
- ์๊ณ์์ญ์ ์ต์ํํด์ผ ํจ์จ์ ์ธ ํ๋ก๊ทธ๋จ์ด ๋จ.
- ์๋์ ์ธ lock์ ๊ฑธ๋ฆผ/ํ๋ฆผ์ด ํธ๋ฆฌํจ.
- ์์ธ๊ฐ ๋ฐ์ํด๋ lock์ด ์๋์ผ๋ก ํ๋ฆผ.
- โณ๊ฐ์ ๋ฉ์๋ ๋ด์์๋ง lock์ ๊ฑธ ์ ์๋ ์ ์ฝ์ด ๋ถํธํจ.
wait( )๊ณผ notify( )
- ๋๊ธฐํ๋ ์๊ณ์์ญ์ ์ฝ๋๋ฅผ ์ํํ๋ค๊ฐ ์์ ์ด ๋ ์ด์ ์งํํ ์ํฉ์ด ์๋ ๋
wait( )ํธ์ถ
- -์ฐ๋ ๋๊ฐ ๋ฝ์ ๋ฐ๋ฉํ๊ณ ํด๋น ๊ฐ์ฒด์ ๋๊ธฐ์ค์์ ์ฌ์คํํต์ง๋ฅผ ๊ธฐ๋ค๋ฆผ.
- -๋ฐ๋ฉํ ๋ฝ์ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์ป์ด์ ํด๋น ๊ฐ์ฒด์ ๋ํ ์์ ์ํ์ด ๊ฐ๋ฅํด์ง.
notify( )ํธ์ถ
- ์์ ์ ์ค๋จํ๋ ์ฐ๋ ๋๊ฐ ๋ค์ ๋ฝ์ ์ป์ด์ ์์ ์ ์งํํจ.
- wait( )์ notify( )๋ ํน์ ๊ฐ์ฒด์ ๋ํ๊ฒ์ผ๋ก, Objectํด๋์ค์ ์ ์๋์ด ์์.
- ๋งค๊ฐ๋ณ์๊ฐ ์๋ wait( )์ ์ง์ ๋ ์๊ฐ๋์๋ง ๊ธฐ๋ค๋ฆผ = notify( )๊ฐ ์๋์ ์ผ๋ก ํธ์ถ๋จ.
- waiting pool์ ๊ฐ์ฒด๋ง๋ค ์กด์ฌํจ.
(๋๊ธฐ์ค)
- notifyAll( )์ด ํธ์ถ๋๋ค๊ณ ๋ชจ๋ ๊ฐ์ฒด(X)์ waiting pool์ ์๋ ์ฐ๋ ๋๊ฐ ๊นจ์์ง๋ ๊ฒ์ด ์๋.
- notifyAll( )ํธ์ถ = ํธ์ถํ ๊ฐ์ฒด์ waitingPool์ ๋๊ธฐ์ค์ธ์ฐ๋ ๋๋ง ํด๋นํจ.
- notify( )๋ ๋๊ธฐ์ค์ธ ์ฐ๋ ๋๋ฅผ ๊นจ์ฐ๋๋ฐ, ํน์ ์ฐ๋ ๋๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์๋ ์๋ฌด ์ฐ๋ ๋๋ ๊นจ์ฐ๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์.
- ๊ธฐ์์ํ:์ด์ด ๋์ ์ฐ๋ ๋๊ฐ ์ค๋ซ๋์ ํต์ง๋ฐ์ง ๋ชปํ๊ณ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ.
- ๊ฒฝ์์ํ:์ฌ๋ฌ ์ฐ๋ ๋๊ฐ lock์ ์ป๊ธฐ ์ํด ์๋ก ๊ฒฝ์ํ๋ ๊ฒ.
- ์ฐ๋ ๋์ ์ข
๋ฅ๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ๊ณต์ ๊ฐ์ฒด์ waiting pool์ ๊ฐ์ด ๋ชฐ์๋ฃ์
- โณ์ ๋ณ์ ์ธ ํต์ง๊ฐ ํ์ํด์ง.
Lock๊ณผ Condition
- ๊ฐ ์ฐ๋ ๋๋ฅผ ์ํ Condition์ ๋ง๋ค์ด์ ๊ฐ๊ฐ์ waiting pool์์ ๋ฐ๋ก ๊ธฐ๋ค๋ฆฌ๋๋ก ํจ.
- ๋๊ธฐ์ ํต์ง์ ๋์์ด ๋ช ํํ ๊ตฌ๋ถ๋จ.
await( )ํธ์ถ
- ๋ฉ์๋๋ ํ์ฌ ์ฐ๋ ๋๋ฅผ ์ผ์์ ์ผ๋ก ์ค๋จํจ.
signal( )ํธ์ถ
- ๋ค๋ฅธ ์ฐ๋ ๋๋ฅผ ๊นจ์ฐ๋ ์ญํ ์ ํจ.
- Lock์ธํฐํ์ด์ค์ ๋ด๋ถ์ธํฐํ์ด์ค๋ก Condition ์ธํฐํ์ด์ค๊ฐ ์ ์๋์ด์์.
- = Lock์ธํฐํ์ด์ค๋ new Condition( ) ๋ฉ์๋๋ฅผ ๊ฐ๊ณ ์์ด์, ์ด ๋ฉ์๋ํธ์ถํ๋ฉด Condition ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๊ฐ ๋ฐํ๋จ.
- Lock ์ธํฐํ์ด์ค์๋ Condition ์ธํฐํ์ด์ค๋ฅผ ์ํ ๋ฉ์๋๊ฐ ์ ์๋์ด ์์ผ๋ฉฐ, ReentrantLock ํด๋์ค๋ Lock ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํฉ๋๋ค. ReentrantLock ํด๋์ค ๋ด๋ถ์๋ Condition ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ Condition ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์์ด์, ReentrantLock ํด๋์ค๋ Lock ์ธํฐํ์ด์ค์ Condition ์ธํฐํ์ด์ค๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ์ ์์.
Lock์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ค์ ๋ชจ๋ Condition๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์.
- โ ReentrantLock ํด๋์ค
- โกReentrantReadWrtieLock ํด๋์ค
- โขStampedLock ํด๋์ค
void lock( ), void unlock( )
- ์๋์ผ๋ก lock์ ์ ๊ทธ๊ณ ํด์ ํด์ผ ํจ.
- ํด์ ๋ฅผ ์์ง ์์ผ๋ ค๊ณ try-finally๋ฌธ์ผ๋ก ๊ฐ์ธ๋ ๊ฒ์ด ์ผ๋ฐ์ ์.
tryLock( )
- ๋ค๋ฅธ ์ฐ๋ ๋์ ์ํด lock์ด ๊ฑธ๋ ค์์ผ๋ฉด lock์ ์ป์ผ๋ ค๊ณ ๊ธฐ๋ค๋ฆฌ์ง ์์. ์ง์ ๋ ์๊ฐ๋งํผ๋ง ๊ธฐ๋ค๋ฆผ. lock์ ์ป์ผ๋ฉด true๋ฐํ, ๋ชป์ป์ผ๋ฉด false๋ฐํ.
- InterruptedException์ ๋ฐ์์ํฌ ์ ์์.
- =์ง์ ๋ ์๊ฐ๋์ lock์ ์ป์ผ๋ ค๊ณ ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ interrupt( )์ ์ํด ์์ ์ด ์ทจ์๋ ์ ์๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค๋ ๋ป.
ReentrantLock๊ณผ Condition
- โ ์ด๋ฏธ ์์ฑ๋ lock์ผ๋ก๋ถํฐ new Condition( ) ํธ์ถํด์ ์ปจ๋์ ์์ฑํ๊ธฐ
- โก wait( ) & notify( ) ๋์ ์ Condition์ await( ) & signal( ) ์ฌ์ฉํ๊ธฐ
ReentrantLock ํด๋์ค
- ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ lock
- ํน์ ์กฐ๊ฑด์์ lock์ ํ๊ณ , ๋์ค์ ๋ค์ lock์ ์ป๊ณ , ์๊ณ์์ญ์ผ๋ก ๋ค์ด์์ ์ดํ์ ์์ ์ ์ํํจ.
ReentrantReadWrtieLock ํด๋์ค
- ์ฝ๊ธฐ๋ฅผ ์ํ lock, ์ฐ๊ธฐ๋ฅผ ์ํ lock์ ์ ๊ณตํจ.
- ์๊ณ์์ญ์ ์ฝ๊ธฐ lock์ด ๊ฑธ๋ ค์์ ๋, ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ์ฝ๊ธฐ lock์ ์ค๋ณต ๊ฑธ๊ธฐ๊ฐ ๊ฐ๋ฅํจ. (์ฝ๊ธฐ๋ ๋ด์ฉ์ ๋ณ๊ฒฝํ์ง ์์ผ๋๊น)
- ์ฝ๊ธฐ lock์ผ ๋, ์ฐ๊ธฐ lock X -์ฐ๊ธฐ lock์ผ ๋, ์ฝ๊ธฐ lock X
StampedLock ํด๋์ค
- lock์ ๊ฑธ๊ฑฐ๋ ํด์งํ ๋ ์คํฌํ๋ฅผ ์ฌ์ฉํจ. (์คํฌํ = longํ์ ์ ์ ์๊ฐ)
- ์ฝ๊ธฐ lock + ์ฐ๊ธฐ lock + ๋๊ด์ ์ฝ๊ธฐ lock
- ๋๊ด์ ์ฝ๊ธฐ lock: lock์ด ๊ฑธ๋ ธ๋์ง ํ์ธํ์ง ์๊ณ ์ผ๋จ ์ฝ๊ธฐ lock์ ๊ฑด๋ค. (์ ํ์ธ→ํ์๋X) (์ ์๋→ํํ์ธO)
- ์ฐ๊ธฐ์ ์ฝ๊ธฐ๊ฐ ์ถฉ๋ํ ๋๋ง ์ฐ๊ธฐ๊ฐ ๋๋ ํ ์ฝ๊ธฐ lock์ ๊ฑด๋ค.
OptionalLock ํด๋์ค
- OptionalLock์ ์๋ฐ์ Lock ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ๋ฝ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ๋ฝ์ด ํ์ํ์ง ์์ ์ํฉ์์๋ ๋ฝ์ ์ฌ์ฉํ์ง ์๋๋ก ํ๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ์๋ ์คํ ๋์ค์ ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์์ผ ํ๋ ๊ฒฝ์ฐ ๋ฑ์์ ๋ฝ์ ์ฌ์ฉํ์ง ์์๋ ๋๋ ์ํฉ์ด ์์ ์ ์์ต๋๋ค. ์ด๋ OptionalLock์ ์ฌ์ฉํ๋ฉด ํ์ํ ๊ฒฝ์ฐ์๋ง ๋ฝ์ ์ฌ์ฉํ ์ ์์ด์ ๋ถํ์ํ ๋ฝ ์ฌ์ฉ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ๊ฐ๋ณ์ ์ธ ๋ฝ ๊ด๋ จ ํด๋์ค๊ฐ ์๋๋ผ, ์ผ๋ฐ์ ์ผ๋ก ๋ฝ์ ์ฌ์ฉํ๋ ์ํฉ์์ ์ ํ์ ์ผ๋ก ๋ฝ์ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ์ ํธ๋ฆฌํฐ ํด๋์ค์ ๋๋ค.
volatile ์ ์ด์
- ๋ณ์ ์์ volatile์ ๋ถ์ด๋ฉด ์ฝ์ด๊ฐ ๋ณ์์ ๊ฐ์ ์ฝ์ด์ฌ ๋, ์บ์๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ด์ค๊ธฐ ๋๋ฌธ์ ์บ์/๋ฉ๋ชจ๋ฆฌ ๋ถ์ผ์น๊ฐ ํด๊ฒฐ๋จ.
- ๋ณ์์ synchronized๋ธ๋ญ์ ์ฌ์ฉํด๋ ๊ฐ์ ํจ๊ณผ
- long/double ํ์ ์ ๋ณ์๋ 8byte(64๋นํธ)๋ก ๋ณ์๊ฐ์ ์ฝ๋ ๊ณผ์ ์์ ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ๋ผ์ด๋ค ์ ์์ผ๋ฏ๋ก ๋ณ์ ์ ์ธ ์ volatile์ ๋ถ์ฌ์ ์์์ ์ธ ์ฐ์ฐ์ ๋ณด์ฅํจ. (๋๊ธฐํ๋ X)
fork & join ํ๋ ์์ํฌ
- ํฐ ์์ ์ ๋ณ๋ ฌ์ฒ๋ฆฌ ํ๊ธฐ ์ํ ๊ฒ.
- ํ๋์ ์์ ์ ์์ ๋จ์๋ก ๋๋ ์ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๋์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ฝ๊ฒ ๋ง๋ค์ด์ค.
- ์ํ์ ๋ฐ๋ผ ๋ ํด๋์ค ์ค ํ๋๋ฅผ ์์๋ฐ์ ๊ตฌํํจ.
- ForkJoinFool : fork&join ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ์ฐ๋ ๋ํ. ์ง์ ๋ ์์ ์ฐ๋ ๋๋ฅผ ์์ฑํด์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ณ ๋ฐ๋ณตํด์ ์ฌ์ฌ์ฉ. ์ฐ๋ ๋ํ์ ์ฐ๋ ๋๊ฐ ์ํํด์ผํ๋ ์์ ์ด ๋ด๊ธด ํ๋ฅผ ์ ๊ณตํ๊ณ , ๊ฐ ์ฐ๋ ๋๋ ์์ ์ ์์ ํ์ ๋ด๊ธด ์์ ์ ์์๋๋ก ์ฒ๋ฆฌํจ.
- ๋น๋๊ธฐ ๋ฉ์๋: ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ฟ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง์์.
ํด๋์ค๋ค์ ๊ด๊ณ
- ์์ ์ ์ด๋ป๊ฒ ๋ถํ ํ ๊ฒ์ธ์ง๋ฅผ ์ ์ํ๊ณ , ์์ ์์ ๋ค์ด ์ด๋ค ๊ณ์ฐ์ ์ํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ป๊ฒ ํฉ์น ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ค์ํจ.
'๐ฅ๏ธ ๋ฐฑ์๋ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ch.14] java.util.function ํจํค์ง (0) | 2023.11.15 |
---|---|
[ch.14] ๋๋ค์ (0) | 2023.11.15 |
[ch.13] ์ฐ๋ ๋ ์คํ ์ ์ด ๋ฉ์๋ (0) | 2023.11.15 |
[ch.13] ํ๋ก์ธ์ค์ ์ฐ๋ ๋ (0) | 2023.11.15 |
[ch.12] ์ด๊ฑฐํ, ์ ๋ํ ์ด์ (0) | 2023.11.14 |