๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

[Java] ์Šค๋ ˆ๋“œ ์ƒ์„ฑ (Runnable ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„, Thread ํด๋ž˜์Šค ์ƒ์†) ๋ณธ๋ฌธ

Java

[Java] ์Šค๋ ˆ๋“œ ์ƒ์„ฑ (Runnable ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„, Thread ํด๋ž˜์Šค ์ƒ์†)

9taetae9 2025. 2. 6. 13:32
728x90

Java์—์„œ๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

Runnable ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ๋ฐฉ์‹

  • ๋ณ„๋„์˜ Runnable ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ด๋ฅผ Thread ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์— ์ „๋‹ฌํ•˜์—ฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ์ด์ „ ๊ฒŒ์‹œ๊ธ€์—์„œ ๋‹ค๋ฃฌ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ์™€ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์„œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์€ ์ฝ”๋“œ์™€ ์Šค๋ ˆ๋”ฉ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์Šค๋ ˆ๋“œ๋กœ ์‹คํ–‰ํ•  ์ž‘์—…์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ณ , ๋™์ผํ•œ Runnable์„ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ์žฌ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ…Œ์ŠคํŠธํ•˜๊ธฐ๊ฐ€ ์šฉ์ดํ•˜๋‹ค. ๋˜ํ•œ, ์ƒ์†์˜ ์ œ์•ฝ ์—†์ด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๋„ ํฐ ์ด์ ์ด๋‹ค.

 

Thread ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ๋ฐฉ์‹

  • Thread ํด๋ž˜์Šค ์ž์ฒด๊ฐ€ Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ์ด๋ฅผ ์ƒ์†ํ•˜์—ฌ run() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ๋‹ค.
  • ์ƒ์†์„ ํ†ตํ•ด ์Šค๋ ˆ๋“œ ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด, ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด๋‚˜ ๊ณตํ†ต ๋กœ์ง ์บก์Аํ™”์— ์œ ๋ฆฌํ•˜๋‹ค.

๋ฐ˜๋ฉด์—, Thread ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐฉ์‹์€ ์Šค๋ ˆ๋“œ ๊ด€๋ จ ๊ธฐ๋Šฅ๊ณผ ์‹คํ–‰ํ•  ๋กœ์ง์ด ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ๊ฒฐํ•ฉ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  ์Šค๋ ˆ๋“œ ๋‚ด๋ถ€์˜ ๋ฉค๋ฒ„๋“ค(์˜ˆ: this.getName() ๋“ฑ)์— ์ง์ ‘ ์ ‘๊ทผํ•˜๊ธฐ ํŽธ๋ฆฌํ•˜๋‹ค. ๋‹จ, ์ด ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๊ธฐ ์–ด๋ ค์›Œ์ง€๋Š” ์ œ์•ฝ์ด ์ƒ๊ธฐ๊ณ , ์Šค๋ ˆ๋“œ์™€ ์‹คํ–‰ํ•  ์ฝ”๋“œ๊ฐ€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜๋ฏ€๋กœ ์ฝ”๋“œ์˜ ๋ชจ๋“ˆํ™” ์ธก๋ฉด์—์„œ๋Š” ์กฐ๊ธˆ ๋ถˆ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜๋Š” Threadํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ NewThread ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์ด๋‹ค.

private static class NewThread extends Thread {
    @Override
    public void run() {
        this.setName("์Šค๋ ˆ๋“œ ์ƒ์† NewThread");
        System.out.println("Hello from = " + this.getName()); //static Thread ํ˜ธ์ถœ ๋Œ€์‹  this ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    }
}

์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด main์—์„œ๋Š” ๋‹จ์ˆœํžˆ new NewThread()์ฒ˜๋Ÿผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Thread thread = new NewThread();
thread.start();

์ƒํ™ฉ์— ๋”ฐ๋ฅธ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ๋ฐฉ์‹

  • ๋งŒ์•ฝ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๊ณ ๋ คํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด ๋” ์ ํ•ฉํ•˜๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ ์‹คํ–‰ํ•  ์ž‘์—…์ด ๋‹จ์ˆœํ•˜๊ณ  ๋‹ค๋ฅธ ์ƒ์† ๊ด€๊ณ„๊ฐ€ ํ•„์š” ์—†์œผ๋ฉฐ, ์Šค๋ ˆ๋“œ ๊ธฐ๋Šฅ๊ณผ ์‹คํ–‰ ๋กœ์ง์„ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•ด๋„ ๊ดœ์ฐฎ๋‹ค๋ฉด Thread๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐฉ์‹์ด ์ข‹๋‹ค.

๊ฒฐ๊ตญ ์–ด๋А ๋ฐฉ์‹์ด ์ •๋‹ต์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ, ์ฝ”๋“œ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ, ํ™•์žฅ์„ฑ ๋“ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

728x90