Coding Planet

๋ฐ๋ชฌ์“ฐ๋ ˆ๋“œ(daemon thread) - ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์™€ java ์ฝ”๋“œ ์˜ˆ ๋ณธ๋ฌธ

๐Ÿ’ป Java Study/Java ์ด๋ก  ์ •๋ฆฌ

๋ฐ๋ชฌ์“ฐ๋ ˆ๋“œ(daemon thread) - ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์™€ java ์ฝ”๋“œ ์˜ˆ

jhj.sharon 2024. 2. 26. 13:54
๋ฐ˜์‘ํ˜•

 

"Daemon" ์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ์›๋ž˜ ๊ทธ๋ฆฌ์Šค ์‹ ํ™”์˜ ๋ณดํ˜ธ์‹  ๋˜๋Š” ์‹ ์˜ ์ง€๋ฐฐ๋ฅผ ๋ฐ›๋Š” ์˜ํ˜ผ์„ ์˜๋ฏธํ•˜๋Š” ๋‹จ์–ด์—์„œ ์œ ๋ž˜๋ฌ์œผ๋‚˜,  ์ปดํ“จํŒ… ๋ถ„์•ผ์—์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋‚˜ ์„œ๋น„์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋ณดํ†ต ์‚ฌ์šฉ์ž์˜ ์ง์ ‘์ ์ธ ๊ฐœ์ž…์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ, ์ž์› ๊ด€๋ฆฌ, ํŒŒ์ผ ์ „์†ก, ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค ์ œ๊ณต ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์šด์˜์ฒด์ œ๋‚˜ ์„œ๋ฒ„์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๋ฐ๋ชฌ์ด ์‹œ์Šคํ…œ์˜ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”๋ฐ ์ด ํฌ์ŠคํŠธ์—์„œ๋Š” ๋ฐ๋ชฌ์“ฐ๋ ˆ๋“œ(daemeon thread)๋ฅผ ์ค‘์ ์ ์œผ๋กœ ์‚ดํŽด ๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

 

| ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ(daemon thread)

 ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋Š” ์ผ๋ฐ˜์“ฐ๋ ˆ๋“œ(๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์•„๋‹Œ ์“ฐ๋ ˆ๋“œ)์˜ ์ž‘์—…์„ ๋•๋Š” ๋ณด์กฐ์ ์ธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ์ด๋‹ค. ์ฃผ ์“ฐ๋ ˆ๋“œ(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ”์ธ์“ฐ๋ ˆ๋“œ)๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์ž๋™์œผ๋กœ ์ข…๋ฃŒ๋˜๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋Š” ๋ฉ”์ธ ์“ฐ๋ ˆ๋“œ์˜ ๋ณด์กฐ์  ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ๋ฉ”์ธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ•„์š” ์—†๊ฒŒ ๋œ๋‹ค.

 ์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๊ด€๋ จ๋œ ์ž‘์—…์— ์ ํ•ฉํ•˜๋‹ค. ์ž๋™์ €์žฅ, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜, ํŒŒ์ผ ๋ชจ๋‹ˆํ„ฐ๋ง, ์„ธ์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง๋“ฑ์˜ ์ž‘์—…์„ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ๋‹ค

 ์ด๋ฅผ ์ œ์™ธํ•˜๋ฉด ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ์™€ ํฌ๊ฒŒ ๋‹ค๋ฅธ์ ์€ ์—†๋‹ค.

 

 

| ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ์“ฐ๋Š” ์ด์œ 

๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ์“ฐ๋Š” ์ด์œ ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ ์ž‘์—…๊ณผ๋Š” ๋ณ„๋„๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š”, ๋น„๊ต์  ์ค‘์š”๋„๊ฐ€ ๋‚ฎ์€ ์ž‘์—…๋“ค์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋  ๋•Œ ์ž๋™์œผ๋กœ ์ •๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด ๋ฐฑ๊ทธ๋ผ์›…ใ„ด๋“œ์—์„œ ๊ณ„์† ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ์ง€ ์•Š๊ณ  ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๋กœ ๊ฐ™์€ ์ž‘์—…์„ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋  ๋•Œ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ข…๋ฃŒ์‹œ๊ฐ„์ด ์ง€์—ฐ๋  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ข…๋ฃŒ์‹œ์ผœ์•ผํ•˜๋Š” ๋ถ€๋‹ด์ด ์ƒ๊ธด๋‹ค. ๋”ฐ๋ผ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ข…๋ฃŒ ๊ณผ์ •์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ์ž‘์—…์—๋Š” ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ ํ•ฉํ•˜๋‹ค. 

 

 

| ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ ์ž‘์„ฑ๋ฒ• - java ์ฝ”๋“œ ์˜ˆ์‹œ

๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋Š” ๋ฌดํ•œ ๋ฃจํ”„์™€ ์กฐ๊ฑด๋ฌธ์„ ์ด์šฉํ•ด์„œ ์‹คํ–‰ ํ›„ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ํŠน์ • ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜๋ฉด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‹ค์‹œ ๋Œ€๊ธฐํ•˜๋„๋ก ์ž‘์„ฑํ•œ๋‹ค. ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ง€์†์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋˜๋ฏ€๋กœ ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹ค์•ป๋˜๋Š” ๋™์•ˆ ๊ณ„์†ํ•ด์„œ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํ•œ๋‹ค.

public class DaemonThreadExample {
    public static void main(String[] args) {
        Thread daemonThread = new Thread(() -> {
            while (true) { 
                try {
                    System.out.println("๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘...");
                    Thread.sleep(1000); // 1์ดˆ ๋™์•ˆ ๋Œ€๊ธฐ
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        daemonThread.setDaemon(true); // ์ด ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋กœ ์„ค์ •
        daemonThread.start(); // ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ ์‹œ์ž‘

        try {
            System.out.println("์ฃผ ์“ฐ๋ ˆ๋“œ๊ฐ€ 3์ดˆ ๋™์•ˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค...");
            Thread.sleep(3000); // ์ฃผ ์“ฐ๋ ˆ๋“œ๋ฅผ 3์ดˆ ๋™์•ˆ ์‹คํ–‰
            System.out.println("์ฃผ ์“ฐ๋ ˆ๋“œ ์ข…๋ฃŒ.");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 

 

  • daemonThread.setDaemon(true) : ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. false๋Š” ์‚ฌ์šฉ์ž ์“ฐ๋ ˆ๋“œ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
  • while(true) : ๋ฌดํ•œ๋ฃจํ”„๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์ฃผ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ์‹คํ–‰๋˜๋„๋กํ•จ
  • Thread.sleep(1000); : ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๋Œ€๊ธฐํ•˜๋„๋ก ํ•˜์—ฌ, ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹œ์Šคํ…œ ์ž์›์„ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•จ
๋ฐ˜์‘ํ˜•
Comments