1. μ€λ λμ λκΈ°ν
- μ€λ λλ λμμ μ¬λ¬ μμ μ λ³λ ¬λ‘ μ²λ¦¬ν μ μκ² ν΄μ£Όλ νλ‘κ·Έλλ° κΈ°λ²μ λλ€. μλ°μμλ λ©ν°μ€λ λ©μ ν΅ν΄ μ¬λ¬ μ€λ λκ° νλμ κ°μ²΄λ λ°μ΄ν°λ₯Ό λμμ μ κ·Όν μ μμ΅λλ€.
- **λκΈ°ν(synchronization)**λ μ¬λ¬ μ€λ λκ° κ°μ λ°μ΄ν°μ μ κ·Όν λ λ°μ΄ν°κ° μμλκ±°λ μλͺ»λ κ°μ΄ μ½νμ§ μλλ‘ λ³΄νΈνλ λ©μ»€λμ¦μ λλ€. λκΈ°ν μμ΄ μ¬λ¬ μ€λ λκ° λμμ νλμ κ°μ²΄λ₯Ό μμ νλ©΄ κ²½μ 쑰건(Race Condition) κ°μ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
2. λ©λͺ¨λ¦¬ λͺ¨λΈ
- μλ°λ λ©λͺ¨λ¦¬ λͺ¨λΈμ ν΅ν΄ μ€λ λ κ°μ λ°μ΄ν° κ°μμ±μ μ μν©λλ€. μ¦, νλμ μ€λ λμμ λ§λ κ°μ²΄λ₯Ό λ€λ₯Έ μ€λ λλ‘ λκΈΈ λ, κ·Έ κ°μ²΄κ° μ΄λ»κ² λ€λ₯Έ μ€λ λμμ λ³Ό μ μλμ§μ λμν μ μλμ§λ₯Ό μ€λͺ νλ κ²μ΄ λ©λͺ¨λ¦¬ λͺ¨λΈμ λλ€.
- μλ° λ©λͺ¨λ¦¬ λͺ¨λΈμ κ° μ€λ λκ° λ©λͺ¨λ¦¬μ μ΄λ»κ² μνΈμμ©νλμ§, λ°μ΄ν°κ° **μ£Ό λ©λͺ¨λ¦¬(Main Memory)**μ μ΄λ»κ² μ°μ΄κ³ μ½νλμ§λ₯Ό μ€λͺ ν©λλ€. μλ₯Ό λ€μ΄, ν μ€λ λκ° κ°μ²΄λ₯Ό λ§λ€κ³ κ°μ μ΄κΈ°νν ν, κ·Έ κ°μ²΄λ₯Ό λ€λ₯Έ μ€λ λλ‘ λκΈΈ λ λ€λ₯Έ μ€λ λκ° ν΄λΉ κ°μ μ λλ‘ μ½μ μ μλμ§μ λ¬Έμ κ° μ¬κΈ°μ ν΄λΉν©λλ€.
λ§μ½ λκΈ°ν μμ΄ ν μ€λ λμμ λ§λ κ°μ²΄λ₯Ό λ€λ₯Έ μ€λ λλ‘ λκΈ°λ©΄, λ€μκ³Ό κ°μ λ¬Έμ κ° λ°μν μ μμ΅λλ€:
- κ°μμ± λ¬Έμ (Visibility Issue):
μ€λ λ Aμμ κ°μ²΄λ₯Ό μμ±νκ³ νλλ₯Ό μ΄κΈ°νν ν, κ·Έ κ°μ²΄λ₯Ό μ€λ λ Bλ‘ λκΈΈ λ, μ€λ λ Bλ μ€λ λ Aμμ λ³κ²½ν κ°μ λ³Ό μ μμ μ μμ΅λλ€. μ΄λ μλ° λ©λͺ¨λ¦¬ λͺ¨λΈμμ λ³κ²½λ κ°μ΄ μ£Ό λ©λͺ¨λ¦¬μ λ°λ‘ κΈ°λ‘λμ§ μκΈ° λλ¬Έμ λ°μν©λλ€. λ°λΌμ μ€λ λ Bλ μ€λ λ Aκ° λ§λ κ°μ²΄μ μ΄κΈ° μνλ μμμΉ λͺ»ν κ°μ λ³Ό μ μμ΅λλ€. - λͺ
λ Ήμ΄ μ¬λ°°μ΄(Reordering):
μλ° μ»΄νμΌλ¬μ CPUλ μ΅μ νλ₯Ό μν΄ λͺ λ Ήμ΄ μ¬λ°°μ΄μ ν μ μμ΅λλ€. μ¦, κ°μ²΄λ₯Ό μμ±νκ³ μ΄κΈ°ννλ μμκ° μ€λ λ Aμμ μ€λ λ Bλ‘ λμ΄κ°λ κ³Όμ μμ λ³κ²½λ μ μμ΄, κ°μ²΄κ° μμ ν μ΄κΈ°νλκΈ° μ μ λ€λ₯Έ μ€λ λμμ κ·Έ κ°μ²΄μ μ κ·Όν μνμ΄ μμ΅λλ€. μ΄λ° κ²½μ°, μ€λ λ Bλ μμ ν μ΄κΈ°νλμ§ μμ κ°μ²΄λ₯Ό λ³Ό μ μμ΅λλ€.
μλ°μμλ λκΈ°ν μμ΄λ μμ νκ² κ°μ²΄λ₯Ό λ€λ₯Έ μ€λ λλ‘ λκΈ°λ λ°©λ²μ΄ μμ΅λλ€. λ€μ λ°©λ²λ€μ΄ μμ£Ό μ¬μ©λ©λλ€:
- λΆλ³ κ°μ²΄(Immutable Object):
λΆλ³ κ°μ²΄λ ν λ² μμ±λλ©΄ μ λ μνκ° λ³κ²½λμ§ μλ κ°μ²΄μ λλ€. λΆλ³ κ°μ²΄λ μμ± κ³Όμ μ€μ λ€λ₯Έ μ€λ λμ λ ΈμΆλλλΌλ μμ ν©λλ€. μλνλ©΄ κ°μ²΄μ μνκ° λ³κ²½λμ§ μκΈ° λλ¬Έμ, λ€λ₯Έ μ€λ λκ° κ·Έ κ°μ²΄λ₯Ό μ½λλΌλ μμ νκ² μ¬μ©ν μ μκΈ° λλ¬Έμ λλ€. μλ°μStringμ΄λIntegerκ°μ ν΄λμ€κ° κ·Έ μμ λλ€. finalνλ:
μλ°μμfinalν€μλλ‘ μ μΈλ νλλ μμ±μκ° μλ£λ μ΄νμ κ°μ΄ λ³κ²½λμ§ μλλ‘ λ³΄μ₯ν©λλ€.finalνλλ‘ μ μΈλ λ³μλ μ€λ λ κ°μ μμ νκ² κ³΅μ λ μ μμ΅λλ€. μ¦, κ°μ²΄κ° λ€λ₯Έ μ€λ λμ λ겨μ‘μ λ,finalνλ κ°μ μΈμ λ μ νν κ°μΌλ‘ λ³Ό μ μλλ‘ λ³΄μ₯λ©λλ€.volatileν€μλ:
μλ°μμλvolatileν€μλλ₯Ό μ¬μ©ν΄ λ³μλ₯Ό μ½κ±°λ μΈ λ νμ μ£Ό λ©λͺ¨λ¦¬μ λκΈ°νλλλ‘ κ°μ ν μ μμ΅λλ€.volatileλ³μλ μ¬λ¬ μ€λ λ κ°μ λμΌν κ°μ νμ λ³Ό μ μλλ‘ λ³΄μ₯νκΈ° λλ¬Έμ, λκΈ°ν μμ΄ κ°μ²΄λ₯Ό μμ νκ² κ³΅μ ν μ μκ² λμμ€λλ€.- μ€λ λ 컨ν
μ€νΈ μ ν ν μ λ¬:
κ°μ²΄λ₯Ό μ€λ λ κ°μ λκΈ°κΈ° μ μ κ·Έ κ°μ²΄κ° μμ ν μμ±λκ³ μ΄κΈ°νλμμμ 보μ₯νλ λ°©λ²μ λλ€. μλ₯Ό λ€μ΄, κ°μ²΄κ° μμ±λ ν μ€λ λλ₯Ό μμνκ±°λ, κ°μ²΄λ₯Ό λκΈ°κΈ° μ μ λ½μ μ¬μ©νμ¬ λκΈ°ννλ λ°©μμΌλ‘ μμ νκ² λκΈΈ μ μμ΅λλ€.
- μλ°μ λ©λͺ¨λ¦¬ λͺ¨λΈμ λ°λ₯΄λ©΄, μ€λ λ κ°μ κ°μ²΄λ₯Ό μμ νκ² κ³΅μ νκΈ° μν΄μλ λκΈ°νκ° νμν©λλ€. νμ§λ§ λΆλ³ κ°μ²΄λ
finalνλ λλvolatileν€μλ κ°μ κΈ°μ μ μ¬μ©νλ©΄ λκΈ°ν μμ΄λ μμ νκ² κ°μ²΄λ₯Ό λ€λ₯Έ μ€λ λλ‘ λκΈΈ μ μμ΅λλ€. - μ΄λ¬ν κ°λ μ λ©ν°μ€λ λ© νκ²½μμ λ°μ΄ν° κ°μμ±κ³Ό μΌκ΄μ±μ 보μ₯νλ λ° λ§€μ° μ€μν©λλ€. νΉν κ°μ²΄κ° μμ ν μ΄κΈ°νλ ν λ€λ₯Έ μ€λ λλ‘ λκΈ°λ κ²μ΄ μ€μνλ©°, μ΄λ₯Ό 보μ₯νμ§ μμΌλ©΄ μ€λ λ κ°μ λ°μ΄ν° μμμ΄λ μμμΉ λͺ»ν λμμ΄ λ°μν μ μμ΅λλ€.