Programing_Java

Section#18 _ μŠ€λ ˆλ“œ λ³Έλ¬Έ

πŸ“œ MENTOR JAVA

Section#18 _ μŠ€λ ˆλ“œ

Joyfullyever 2025. 1. 25. 21:09

#1 ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ

: λ™μ‹œμ— 두 κ°€μ§€ μ΄μƒμ˜ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” 것 → λ©€ν‹°νƒœμŠ€ν‚Ή(Multi-Tasking)

: ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œλ₯Ό 톡해 λ©€ν‹°νƒœμŠ€ν‚Ήμ΄ κ°€λŠ₯

 

ν”„λ‘œκ·Έλž¨ : ν”„λ‘œκ·Έλž˜λ° μ½”λ“œμ˜ 집합체 의미

 

ν”„λ‘œμ„ΈμŠ€ : ν”„λ‘œκ·Έλž¨μ˜ ν•œ λ‹¨μœ„λ₯Ό λ§ν•˜λ©° μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μœΌλ‘œ λ©”λͺ¨λ¦¬μ— λ…λ¦½μ μœΌλ‘œ μ €μž₯λ˜μ–΄ μ‹€ν–‰

→ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” μˆœκ°„ λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€κ³  λ™μž‘ν•˜κ²Œ λ˜λŠ”λ° 이 μƒνƒœμ˜ ν”„λ‘œκ·Έλž¨

→ ν”„λ‘œμ„ΈμŠ€λŠ” λ…λ¦½μ μœΌλ‘œ λ©”λͺ¨λ¦¬μ— λ“±λ‘λ˜κΈ° λ•Œλ¬Έμ— μ—¬λŸ¬κ°œμ˜. ν”„λ‘œκ·Έλž¨μ„ λ™μ‹œμ— μ‹€ν–‰ν•  수 있게 됨

→ 각각의 ν”„λ‘œμ„ΈμŠ€λ“€μ€ λ©”λͺ¨λ¦¬μ— λ…λ¦½μ μœΌλ‘œ λ“±λ‘λ˜μ–΄ μ„œλ‘œ κ°„μ„­ν•  수 μ—†μŒ

 

μŠ€λ ˆλ“œ : ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ λ™μž‘ν•˜λŠ” μž‘μ—… λ‹¨μœ„λ₯Ό λ§ν•˜λ©° μŠ€λ ˆλ“œλ₯Ό 톡해 λ™μ‹œμ— μ—¬λŸ¬ κ°€μ§€ μž‘μ—…μ„ ν•  수 있음

→ ν”„λ‘œμ„ΈμŠ€ 내뢀에 μ‘΄μž¬ν•˜λ©΄μ„œ μ‹€ν–‰ 흐름을 λ‚˜νƒ€λ‚΄λŠ” 것

→ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ λ‹€μ–‘ν•œ μž‘μ—…μ„ λ™μ‹œμ— ν•˜κΈ° μœ„ν•΄ μŠ€λ ˆλ“œκ°€ 각자 λ…λ¦½μ μœΌλ‘œ μ‘΄μž¬ν•˜μ—¬ 일을 μˆ˜ν–‰

 

#2 μŠ€λ ˆλ“œμ˜ μ‚¬μš©

μŠ€λ ˆλ“œ 생성 방법

1. Thread 클래슀λ₯Ό μƒμ†ν•˜μ—¬ run() λ©”μ„œλ“œ κ΅¬ν˜„

2. Runnable μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ → Runnable μΈν„°νŽ˜μ΄μŠ€ : λͺΈμ²΄κ°€ μ—†λŠ” λ©”μ„œλ“œ run() λ©”μ„œλ“œ 단 ν•˜λ‚˜λ§Œμ„ κ°€μ§€λŠ” μΈν„°νŽ˜μ΄μŠ€

 

#2-1 Thread 클래슀 상속

: run() λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜μ§€λ§Œ, μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” start() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄μ•Όν•¨

 

#2-2 Runnable μΈν„°νŽ˜μ΄μŠ€ 상속

: Runnable을 λ§€κ°œκ°’μœΌλ‘œ κ°–λŠ” μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄ 생성

Thread th = new Thread(Runnable을 μƒμ†ν•œ μΈμŠ€ν„΄μŠ€);

: μ‹€μ œ Thread ν΄λž˜μŠ€κ°€ μŠ€λ ˆλ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 주체이고, Runnable μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†ν•œ ν΄λž˜μŠ€λŠ” μ‹€ν–‰ μ½”λ“œλ₯Ό μ§€λ‹Œ 객체

 

#2-3 읡λͺ… 클래슀λ₯Ό λžŒλ‹€μ‹μœΌλ‘œ ν‘œν˜„

: 읡λͺ… 클래슀λ₯Ό λ§Œλ“€μ–΄μ„œ μ‚¬μš© → μΈν„°νŽ˜μ΄μŠ€λ₯Ό 읡λͺ… 객체둜 μ„ μ–Έν•˜μ—¬ 처리 : λ”°λ‘œ 클래슀λ₯Ό λ§Œλ“€μ§€ μ•Šκ³ λ„ μŠ€λ ˆλ“œ κ΅¬ν˜„ κ°€λŠ₯

 

#2-4 Thread에 이름 λΆ€μ—¬ν•˜κΈ°

: μŠ€λ ˆλ“œλŠ” 닀쀑 싀행이 κ°€λŠ₯  μŠ€λ ˆλ“œκ°€ μ§„ν–‰ 쀑인 μž‘μ—…μ„ μ•ŒκΈ° μœ„ν•΄ setName(); 을 톡해 이름 λΆ€μ—¬ κ°€λŠ₯

 

#2-5 λ©€ν‹° μŠ€λ ˆλ“œ

: μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œλ₯Ό μ΄μš©ν•΄ λ™μ‹œμ— μž‘μ—…μ„ μˆ˜ν–‰

: 비동기 μž‘μ—… → 같은 μ‹œκ°„μ— μ„œλ‘œ λ‹€λ₯Έ 독립적인 μŠ€λ ˆλ“œκ°€ 일을 μ²˜λ¦¬ν•˜λŠ” 것

 

#3 μŠ€λ ˆλ“œ 동기화

: μŠ€λ ˆλ“œ μ‚¬μ΄μ—μ„œ μžμ› μ†Œμœ μ˜ μˆœμ„œκ°€ 잘λͺ»λ˜μ–΄ κ²°κ³Όκ°€ λ‹€λ₯΄κ²Œ λ‚˜μ˜¬ μˆ˜λ„ 있음

: μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ ν•˜λ‚˜μ˜ 곡유 데이터에 λ™μ‹œμ— μ ‘κ·Όν•˜μ§€ λͺ»ν•˜λ„둝 μŠ€λ ˆλ“œμ˜ 싀행을 μ œμ–΄

 

#3-1 μŠ€λ ˆλ“œ 동기화 처리

: μž„κ³„ μ˜μ—­ → λ©€ν‹° μŠ€λ ˆλ“œ ν”„λ‘œκ·Έλž¨μ—μ„œ 단 ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ§Œ μ²˜λ¦¬ν•  수 μžˆλŠ” μ˜μ—­

: 동기화 처리 → ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ μž„κ³„ μ˜μ—­μ— μ§„μž…ν•˜λ©΄ 락을 κ±Έμ–΄ λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ μˆ˜ν–‰λ˜μ§€ λͺ»ν•˜λ„둝, μž‘μ—…μ΄ λλ‚˜λ©΄ 락 ν•΄μ œ

: Keyword → "synchronized"

: λ©”μ„œλ“œ 동기화 처리 → λ©”μ„œλ“œ 이름 μ•žμ— ν‚€μ›Œλ“œ μ‚¬μš©μ‹œ λ©”μ„œλ“œ 전체 동기화 처리 / 단점 : 처리 μ‹œκ°„μ΄ κΈΈμ–΄μ§ˆ 경우 μ„±λŠ₯에 영ν–₯을 λ―ΈμΉ¨

public synchronized void Ex()...

: 블둝 동기화 처리 → λ©”μ„œλ“œ 전체가 μ•„λ‹Œ νŠΉμ • μ˜μ—­λ§Œ 동기화 처리, μ‹€μ œ μ‹€ν–‰ν•˜λŠ” μŠ€λ ˆλ“œμ˜ 일뢀뢄을 λ™κΈ°ν™”ν•˜μ—¬ 처리

synchronized (객체λͺ…)...

#4 μŠ€λ ˆλ“œ μƒνƒœ

μƒνƒœ μƒμˆ˜ μ„€λͺ…
생성 NEW μŠ€λ ˆλ“œ 객체가 μƒμ„±λ˜μ—ˆμ§€λ§Œ, start()λ©”μ„œλ“œ 호좜X
λŒ€κΈ° RUNNABLE μ‹€ν–‰ λŒ€κΈ° λ˜λŠ” μ‹€ν–‰ μƒνƒœλ‘œ μ–Έμ œλ“ μ§€ 갈 수 μžˆλŠ” μƒνƒœ
μΌμ‹œμ •μ§€ WATING λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ μ’…λ£Œλ  λ•Œ κΉŒμ§€ λŒ€κΈ°ν•˜λŠ” μƒνƒœ
TIMED_WAITING μ£Όμ–΄μ§„ μ‹œκ°„ λ™μ•ˆ λŒ€κΈ°ν•˜λŠ” μƒνƒœ
BLOCKED 락이 풀릴 λ•ŒκΉŒμ§€ λŒ€κΈ°ν•˜λŠ” μƒνƒœ
μ’…λ£Œ TERMINATED μˆ˜ν–‰μ„ μ’…λ£Œν•œ μƒνƒœ

 

#4-1 NEW 와 RUNNABLE, TERMINATED

NEW : 처음 μŠ€λ ˆλ“œκ°€ 생성될 λ•Œ

RUNNABLE : 생성 이후에 start()λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ μ‹œ

TERMINATED : μ‹œμž‘ 이후 μŠ€λ ˆλ“œκ°€ μ’…λ£Œλ˜λ©΄

 

#4-2 μŠ€λ ˆλ“œ WAIT

: ν•„μš”μ— μ˜ν•΄μ„œ μŠ€λ ˆλ“œλ₯Ό μž μ‹œ 멈좀 μƒνƒœλ‘œ λ‘λŠ” 것 → 일정 μ‹œκ°„μ„ μ§€μ •ν•˜κ±°λ‚˜ 멈좀 μƒνƒœμ˜ 락이 풀릴 λ•ŒκΉŒμ§€ λŒ€κΈ°ν•˜λ„λ‘ ν•  수 있음

sleep → μ£Όμ–΄μ§„ μ‹œκ°„ λ™μ•ˆ μŠ€λ ˆλ“œλ₯Ό μ •μ§€μ‹œν‚€λŠ” λ©”μ„œλ“œ

wait()와 notify()

wait() → μŠ€λ ˆλ“œλ₯Ό λŒ€κΈ°μ‹œν‚¬ λ•Œ

notify() → λŒ€κΈ° 쀑인 μŠ€λ ˆλ“œλ₯Ό λ‹€μ‹œ λ™μž‘μ‹œν‚¬ λ•Œ