LifeCycle
Java 언어에서 멀티스레딩은 Thread 의 핵심 개념에 의해 구동됩니다 . 수명 주기 동안 스레드는 다양한 상태를 거칩니다.
상태
STATUS
DESC
NEW
아직 실행을 시작하지 않은 새로 생성된 스레드
RUNNABLE
실행 중이거나 실행할 준비가 되었지만 리소스 할당을 기다리고 있습니다
BLOCKED
동기화된 블록/방법에 들어가거나 다시 들어가기 위해 모니터 잠금을 획득하기 위해 대기 중
WAITING
시간 제한 없이 다른 스레드가 특정 작업을 수행하기를 기다립니다
TIMED_WAITING
지정된 기간 동안 다른 스레드가 특정 작업을 수행하기를 기다립니다
TERMINATED
실행을 완료했습니다
How do code?
NEW , RUNNABLE
val runnable: Runnable = Runnable {
println("Thread is running")
}
val t = Thread(runnable)
println(t.state) // NEW
t.start()
println(t.state) // RUNNABLE
BLOCKED
class BlockRunnable: Runnable {
override fun run() {
commonResource();
TODO("Not yet implemented")
}
@Synchronized
fun commonResource() {
while(true) { }
}
}
fun main(args: Array<String>) {
val thread1 = Thread(BlockRunnable())
val thread2 = Thread(BlockRunnable())
thread1.start();
thread2.start();
Thread.sleep(1000);
System.out.println(thread2.getState()); // BLOCKED
}
WAITING
fun inner() : Runnable= Runnable { try {
Thread.sleep(1000)
} catch (e: InterruptedException) {
Thread.currentThread().interrupt()
e.printStackTrace()
}
println(thread.state) // WAITING
}
fun waiting() = Runnable {
val inner = Thread(inner())
inner.start()
try {
inner.join()
} catch (e: InterruptedException) {
Thread.currentThread().interrupt()
e.printStackTrace()
}
}
val thread:Thread = Thread(waiting())
fun main() {
thread.start();
}
TIME WAITING
fun timeWaiting() = Runnable {
Thread.sleep(5000)
}
val thread:Thread = Thread(timeWaiting())
fun main() {
thread.start();
Thread.sleep(1000)
println(thread.state) // TIME WAIT
}
TERMINATE
fun timeWaiting() = Runnable {
println("TERMINATE")
}
val thread:Thread = Thread(timeWaiting())
fun main() {
thread.start();
Thread.sleep(1000)
println(thread.state)
}
Last updated