π£ 8. Thread & Lock
- κ΅μ°© μν(deadlock)μ λν μΌλ°μ μΈ μ΄ν΄λ νκ°
μλ°μ μ€λ λ
- λͺ¨λ μ€λ λλ
java.lang.Thread
ν΄λμ€ κ°μ²΄μ μν΄ μμ±/μ μ΄ λ 립μ μΈ μμ© νλ‘κ·Έλ¨μ΄ μ€νλ λ,
main()
λ©μλλ₯Ό μ€ννκΈ° μν νλμ μ¬μ©μ μ€λ λλ₯Ό μ£Ό μ€λ λ(main thread)λΌκ³ λΆλ₯Έλ€.- μλ°μμ μ€λ λλ₯Ό ꡬννλ λ°©λ²
java.lang.Runnable
μΈν°νμ΄μ€ ꡬνjava.lang.Thread
ν΄λμ€ μμ
Runnable μΈν°νμ΄μ€λ₯Ό ꡬννλ λ°©λ²
Runnable μΈν°νμ΄μ€
1 2 3
public interface Runnable { void run(); }
Runnable
μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€ μμ±- ν΄λΉ ν΄λμ€μ κ°μ²΄λ
Runnable
κ°μ²΄κ° λ¨
- ν΄λΉ ν΄λμ€μ κ°μ²΄λ
Thread
νμ μ κ°μ²΄λ₯Ό λ§λ€ λ,Thread
μμ±μμRunnable
κ°μ²΄λ₯Ό μΈμλ‘ λκΈ΄λ€.- μ΄μ λ¨κ³μμ μμ±ν Thread κ°μ²΄μ
start()
λ©μλλ₯Ό νΈμΆνλ€.
Thread ν΄λμ€ μμ
Thread
ν΄λμ€λ₯Ό μμλ°μμ μ€λ λλ₯Ό λ§λ€ μ λ μλ€.- κ±°μ νμ
run()
λ©μλλ₯Ό μ€λ²λΌμ΄λν΄μΌνλ©° νμ ν΄λμ€μ μμ±μλ μμ ν΄λμ€μ μμ±μλ₯Ό λͺ μμ μΌλ‘ νΈμΆν΄μΌνλ€.
Thread μμ πΒ Runnable μΈν°νμ΄μ€ ꡬν
Runnable
μΈν°νμ΄μ€λ₯Ό ꡬννλ κ²Thread
μμλ³΄λ€ μ νΈλλ μ΄μ ?- μλ°λ λ€μ€ μμμ μ§μνμ§ μμ β Thread ν΄λμ€λ₯Ό μμνκ² λλ©΄ νμ ν΄λμ€λ λ€λ₯Έ ν΄λμ€λ₯Ό μμν μ μμ
λκΈ°νμ λ½
- νλ‘μΈμ€ μμμ μμ±λ μ€λ λλ€μ κ°μ λ©λͺ¨λ¦¬ 곡κ°μ 곡μ
λ μ€λ λκ° κ°μ μμμ λμμ λ³κ²½νλ κ²½μ° β λ¬Έμ λ°μ
- 곡μ μμμ λν μ κ·Ό μ μ΄
- λκΈ°ν μ μ©
λκΈ°νλ λ©μλ
synchronized
ν€μλ : 곡μ μμμ λν μ κ·Ό μ μ΄- ν€μλλ λ©μλμ μ μ©
λκΈ°νλ λΈλ‘
- νΉμ μ½λ λΈλ‘ λκΈ°ν
- λ©μλ λκΈ°νμ μμ£Ό λΉμ·νκ² λμ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MyClass extends Thread {
...
public void run() {
myObj.foo(name);
}
}
public class MyObject {
public void foo(String name){
synchronized(this) {
...
}
}
}
- νλμ μ€λ λλ§μ΄
synchronized
λΈλ‘ μμ μ½λ μ€ν κ°λ₯
λ½
- μ’ λ μΈλ°νκ² λκΈ°ν μ μ΄ β λ½(lock) μ¬μ©
- λ½ = λͺ¨λν°
κ΅μ°©μνμ κ΅μ°©μν λ°©μ§
- κ΅μ°©μν λ°μ 쑰건
- μν¬λ°°μ
- λκΈ°
- μ μ λΆκ°λ₯
- λκΈ° μνμ μ¬μ΄ν΄
This post is licensed under CC BY 4.0 by the author.