Post

🐣 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.