μ€λ λλ μ€νλκΈ° μνμ μ€ν μνλ₯Ό λ²κ°μκ°λ©΄μ μμ μ run() λ©μλλ₯Ό μ‘°κΈμ© μ€νν©λλ€.
κ·Έ ν λμ΄μ μ€νν μ½λκ° μμ λ μ’ λ£ μνκ° λ©λλ€.
μ€λ λ κ°μ²΄ μμ± -> start() -> μ€νλκΈ°(μ€μΌμ€λ§μΌλ‘ μΈν΄) <-> μ€ν -> μ’ λ£
- μ€λ λ μ€μΌμ€λ§μΌλ‘ μ νλ μ€λ λκ° cpuλ₯Ό μ μ νκ³ run() λ©μλλ₯Ό μ€ννλ€ (μ€ν μν)
- μ€λ λ μ€μΌμ€λ§μ μν΄ λ€μ μ€νλκΈ° μνλ‘ λμκ° μ μλ€.(μ€νλκΈ° μν)
μ΄λ»κ² μ μ΄ν κΉ?
1. μ£Όμ΄μ§ μκ°λμ μΌμ μ μ§ sleep()
μ€ν μ€μΈ μ€λ λλ₯Ό μΌμ μκ° λ©μΆ μ μκ² νλ€.
Thread ν΄λμ€μ μ μ λ©μλμΈ sleep() μ μ¬μ©νλ€.
Thread.sleep(1000) // 1μ΄ -> λ°λ¦¬μΈμ»¨λ (1/1000) λ¨μ
* μ£Όμ΄μ§ μκ°μ΄ λκΈ°μ μ interrupt() λ©μλκ° νΈμΆλλ©΄ InterruptedException λ°μ! (μμΈ μ²λ¦¬ νμ)
2. λ€λ₯Έ μ€λ λμκ² μ€ν μ보 yield()
Thread.yield();
μ΄ λ©μλλ₯Ό νΈμΆν μ€λ λλ μ€ν λκΈ° μνλ‘ λμκ°κ³ λμΌν μ°μ μμ or λμ μ°μ μμλ₯Ό κ°λ λ€λ₯Έ μ€λ λκ° μ€ν κΈ°νλ₯Ό κ°μ§ μ μλλ‘ ν΄μ€λ€.
3. λ€λ₯Έ μ€λ λμ μ’ λ£ κΈ°λ€λ¦Ό join()
μ€λ λλ λ€λ₯Έ μ€λ λμ λ 립μ μΌλ‘ μ€νλμ΄μΌ νλ κ²μ΄ κΈ°λ³Έμ΄μ§λ§ λ€λ₯Έ μ€λ λκ° μ€νλμ΄ μ’ λ£λ λ κΉμ§ κΈ°λ€λ¦¬λ κ²½μ°λ μλ€.
μλ₯Όλ€μ΄ λ€λ₯Έ μ€λ λμ κ³μ°κ°μ λ°μ μ΄μ©νλ κ²½μ°κ° μ΄μ ν΄λΉνλ€.
public static void main(String[] args){
SumThread sumThread = new SumThread();
sumThread.start();
try{
sumThread.join():
}cath(InterruptedException e){
}
}
}
sumThread.join(); μμ sumThreadκ° νλ μΌμ΄ λͺ¨λ μ’ λ£λ λ κΉμ§ main μ€λ λλ₯Ό μΌμμ μ§ μν¨λ€.
4. μ€λ λ κ° νμ wait(), notify(), notifyAll()
λ κ°μ μ€λ λλ₯Ό λ²κ°μκ°λ©° μ€νν΄μΌ ν κ²½μ°κ° μλ€.
λ°©λ²μ 곡μ κ°μ²΄μ μλ€ μ€λ λκ° μμ ν λ΄μ©μ κ°κ° λκΈ°ν λ©μλλ‘ κ΅¬λΆν΄ λκ³ ν μ€λ λκ° μλ£νλ©΄ notify() λ©μλλ₯Ό νΈμΆν΄μ
μΌμ μ μ§ μνμ μλ λ€λ₯Έ μ€λ λλ₯Ό μ€ν λκΈ° μνλ‘ λ§λ€μ΄ μμ μ λλ² μμ νμ§ μλλ‘ wait() λ©μλλ₯Ό νΈμΆνμ¬ μΌμ μ μ§ μνλ‘ λ§λ λ€.
5. μ€λ λμ μμ ν μ’ λ£ stop νλκ·Έ, interrept()
μ€λ λλ μμ μ run() λ©μλκ° λͺ¨λ μ€νλλ©΄ μλμ μΌλ‘ μ’ λ£λλ€.
κ²½μ°μ λ°λΌ κ°μ μ’ λ£ν νμκ° μλ€. stop() λ©μλλ₯Ό μ 곡νκ³ μμμ§λ§ κ°μ μ’ λ£νκ² λλ©΄ μ¬μ©μ€μΈ μμλ€μ΄ λΆμμ ν μνλ‘ λ¨κ²¨μ§κΈ° λλ¬Έμ deprecated λμλ€. κ·Έλ λ€λ©΄ μλμ κ°μ λ°©λ²μ μ¬μ©νλ©΄ λλ€.
1. stop νλκ·Έλ₯Ό μ΄μ©νλ€.
stop νλκ·Έλ₯Ό μ΄μ©ν΄μ run() λ©μλμ μ’ λ£λ₯Ό μ λνλ λ°©λ²μ΄λ€.
private boolean stop // stop νλκ·Έ νλ
public void run(){
while(!stop){ // stopμ΄ trueκ° λλ©΄ run()μ΄ μ’
λ£λλ€.
λ°λ³΅ μ€νλλ μ½λ
}
// μμ μ 리
}
}
2. interrupt() λ©μλλ₯Ό μ΄μ©νλ€.
μ€λ λκ° μΌμ μ μ§ μνμ μμ λ InterruptedException μμΈλ₯Ό λ°μμν€λ μν μ νλ€.
whileλ¬Έμμμ sleep() λ©μλλ‘ μΌμ μ μ§λ₯Ό μν€κ² λλ©΄ InterruptedExcetionμ΄ λ°μνμ¬ whileλ¬Έμ λΉ μ Έλμ run() λ©μλλ₯Ό μ μ μ’ λ£νλ€.
thraed.interrupt()
//////////
while(true){
if(Thread.interrupted()){
break;
}
}
-> aμμ thread.interrupt()λ₯Ό μ¬μ©νμ¬ bκ° λ©μΆλλ‘ νλ€.
bλ ifλ¬Έμ μ¬μ©νμ¬ interrupt()μ νΈμΆ μ¬λΆλ₯Ό νμΈνκ³ whileλ¬Έμ λΉ μ Έλμ€λ©΄μ run() λ©μλ μ’ λ£