λ©ν°νμ€νΉ
multi + tasking
λ€μμ μμ μ λμμ μ²λ¦¬νλ κ²
ex) λ―Έλμ΄ νλ μ΄μ΄ (μ€λμ€+λΉλμ€μ¬μ λμμ μ λ ₯μ²λ¦¬)
μ€λ λ / μ΄μ체μ
μ΄μ체μ μ μν΄ κ΄λ¦¬λλ μμ
λ©ν° νλ‘μΈμ±
νλμ μμ©νλ‘κ·Έλ¨μ μ¬λ¬κ°μ νλ‘μΈμ€λ‘ ꡬμ±νμ¬ κ° νλ‘μΈμ€κ° νλμ μμ μ μ²λ¦¬νλλ‘ νλ κΈ°λ² (μμ / λ©λͺ¨λ¦¬ λ 립μ )
λ©ν° μ€λ λ©
νλμ μμ©νλ‘κ·Έλ¨μ μ¬λ¬κ°μ μ€λ λλ‘ κ΅¬μ±νκ³ κ° μ€λ λλ‘ νμ¬κΈ νλμ μμ μ μ²λ¦¬νλλ‘ νλ κΈ°λ² (μμ/λ©λͺ¨λ¦¬λ₯Ό 곡μ ν¨)
λ€μμ μ€λ λλ₯Ό λμμ μ€νμν€λλ‘ μμ© νλ‘κ·Έλ¨μ μμ±νλ κΈ°λ²
(ex ) μΉ μλ²)
μλ° μ€λ λ / JVM
JVM μ μν΄ μ€μΌμ₯΄ λλ μ€ν λ¨μ μ½λ λΈλ‘
- jvm μλ°κ°μκΈ°κ³κ° μ΄μ체μ μν μ ν¨
- JVM 1 = μλ° μμ©νλ‘κ·Έλ¨ 1 → μλ° μ€λ λ N ⇒ λ©ν° μ€λ λ© μ§μ
μλ° μ€λ λ λ§λ€κΈ° —- Thread ν΄λμ€
ava.lang.Thread , Thread ν΄λμ€λ₯Ό μμ λ°μ μ½λλ₯Ό λ§λ λ€.
- Thread ν΄λμ€μ μ£Όμλ©μλ : run(), start() λ±λ±
- Thread ν΄λμ€ μμ → run () μ€λ²λΌμ΄λ©
- μ€λ λ κ°μ²΄ μμ± : TimeThread th = new TimeThread();
- μ€λ λ μμ : th.start(); // jvm μ μ€λ λλ‘ μΈμ + μ€μΌμ₯΄λ§ κ°λ₯ μν !! start() ν¨μλ μ λ μ€λ²λΌμ΄λ© XXX !!
- jvmμ΄ μ€λ λλ₯Ό μ€μΌμ₯΄λ§ → run() μ€ν λ¨
- sleep(1000); → μ€λ λκ° 1000ms λμ μ μλ μ½λ (μμΈμ²λ¦¬νμ → try - catch )
try {
sleep(1000);
}
catch(InterruptedException e) {return;}
μλ° μ€λ λ λ§λ€κΈ° —— Runnable μΈν°νμ΄μ€
java.lang.Runnable , μΆμ λ©μλ run() λ§ κ°μ§ μΈν°νμ΄μ€
- Runnable μΈν°νμ΄μ€ ꡬν → run () μ€λ²λΌμ΄λ©
- μ€λ λ κ°μ²΄ μμ± : Thread th = new Thread(new TimerRunnable());
- μ€λ λ μμ : th.start();
main μ€λ λ
JVM μ μμ©νλ‘κ·Έλ¨ μμ μ μ€λ λ νλ μμ± → main () λ©μλ μ€ννλλ‘ ν¨
μ€λ λ μ’ λ£ — μ€μ€λ‘ μ’ λ£
- run() λ©μλκ° μ’ λ£λ¨
- 리ν΄νλ κ²½μ°
μ€λ λ μ’ λ£ — κ°μ μ’ λ£
- μ’ λ£ μν¬ μ€λ λ κ°μ²΄μ interrup() λ©μλ νΈμΆ
- InterruptedException μμΈ λ°μ → μμΈμ²λ¦¬ ν΄μ£ΌκΈ° try-catch (sleep())
μ€λ λ λκΈ°ν —- synchronized
λ€μμ μ€λ λκ° κ³΅μ λ°μ΄ν°λ₯Ό λμμ μ κ·Όνλ κ²½μ°, 곡μ λ°μ΄ν° κ°μ΄ λΉμ μ μ μΌλ‘ μ μ§ λμ§ μλλ‘ μ€λ λμ μ€νμ μ μ΄νλ κΈ°μ ⇒ μμ°¨ν νμ¬ ν΄κ²°
- νλμ© μμ°¨μ μΌλ‘ μ€ννλλ‘ μ μ΄νλ κΈ°μ
- synchronized ν€μλ : λκΈ°νκ° μ€μ λ μκ³ μμμΌλ‘ μ§μ νκ²ν΄μ€
- lock : synchronized μ½λμ μ κ·Όνλ©΄ lock μ΄ κ±Έλ¦°λ€.
μ€λ λ λκΈ°ν —- wait() - notify()
ν κ°μ 곡μ λ°μ΄ν°λ₯Ό , λκ°μ μ€λ λκ° λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ λ μΆ©λ ⇒ producer - consumer λ¬Έμ
ex) λ―Έλμ΄ νλ μ΄μ΄ (μ λ ₯μ€λ λ ↔ λκΈ°ν κ°μ²΄ ↔ μ¬μμ€λ λ)
- λͺ¨λ κ°μ²΄λ λκΈ°ν κ°μ²΄κ° λ¨. (object ν΄λμ€μ wait() - notify() )