LifeCycle

Java ė–¸ė–´ė—ė„œ 멀티ėŠ¤ë ˆë”Šė€ Thread ė˜ í•ĩė‹Ŧ 개념ė— ė˜í•´ ęĩŦ동됩니다 . ėˆ˜ëĒ… ėŖŧ기 동ė•ˆ ėŠ¤ë ˆë“œëŠ” 다ė–‘í•œ ėƒíƒœëĨŧ ęą°ėšŠë‹ˆë‹¤.

ėƒíƒœ

STATUSDESC

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