LifeCycle

Java ์–ธ์–ด์—์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์€ Thread ์˜ ํ•ต์‹ฌ ๊ฐœ๋…์— ์˜ํ•ด ๊ตฌ๋™๋ฉ๋‹ˆ๋‹ค . ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋™์•ˆ ์Šค๋ ˆ๋“œ๋Š” ๋‹ค์–‘ํ•œ ์ƒํƒœ๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

Drawing

์ƒํƒœ

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