"์•ˆ๋…•ํ•˜์„ธ์š”, ์•„๋ฏธ๊ณ ! Ellie๊ฐ€ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•ด ๋งํ–ˆ๊ณ  ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ƒˆ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."

1)  ์Šค๋ ˆ๋“œ ๊ฐ์ฒด ์ƒ์„ฑ

2) ์‹คํ–‰ํ•˜๋ ค๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ „๋‹ฌํ•˜์‹ญ์‹œ์˜ค.

3)  ์ƒ์„ฑ๋œ Thread ๊ฐ์ฒด์—์„œ start ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

์•”ํ˜ธ ์„ค๋ช…
class Printer implements Runnable
{
public void run()
{
System.out.println("Iโ€™m printer");
}
}
Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค .
public static void main(String[] args)
{
Printer printer = new Printer();
Thread childThread = new Thread(printer);
childThread.start();
}
1 run ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” Printer ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
2 ์ƒˆ ์Šค๋ ˆ๋“œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. run() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ํ”„๋ฆฐํ„ฐ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑ์ž์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. 3 start()
๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒˆ ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค .

์†Œ๊ทœ๋ชจ Java ํ”„๋กœ๊ทธ๋žจ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ยซ์ฃผ ์Šค๋ ˆ๋“œยป๋ผ๋Š” ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ๊ทธ๋žจ์€ ์ข…์ข… "์ž์‹ ์Šค๋ ˆ๋“œ"๋ผ๊ณ  ํ•˜๋Š” ์ถ”๊ฐ€ ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ๋ฉ”์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. Runnable ์˜ run ๋ฉ”์†Œ๋“œ๋Š” ํ•˜์œ„ ์Šค๋ ˆ๋“œ ์— ๋Œ€ํ•œ ์œ ์‚ฌํ•œ ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค.

"์•„, ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋งŽ๋‹ค๋Š” ๊ฑด ๋ฉ”์ธ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋งŽ๋‹ค๋Š” ๋œป์ด์•ผ."

์ƒˆ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ๋ฐ ์‹œ์ž‘ - 1

Thread ๊ฐœ์ฒด์— ์–ด๋–ค ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐœ์ฒด์— ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Java์—์„œ๋Š” Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” ๋‹จ์ผ ์ถ”์ƒ ๋ฉ”์„œ๋“œ์ธ void run() ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค . Thread ํด๋ž˜์Šค์—๋Š” Thread(Runnable Runnable) ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Runnable ์ธํ„ฐํŽ˜์ด์Šค ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ๋“  ๊ฐœ์ฒด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

ํด๋ž˜์Šค๋Š” Runnable์„ ์ƒ์† ํ•˜๊ณ  ํ•ด๋‹น run ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ƒˆ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. run ๋ฉ”์„œ๋“œ ์— ์›ํ•˜๋Š” ๋Œ€๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

์•”ํ˜ธ ์„ค๋ช…
class Printer implements Runnable
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("Iโ€™m " + this.name);
}
}
Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
Thread thread1 = new Thread(printer1);
thread1.start();

Printer printer2 = new Printer("Jack");
Thread thread2 = new Thread(printer2);
thread2.start();
}
๊ฐ๊ฐ ๊ณ ์œ ํ•œ Printer ๊ฐœ์ฒด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
public static void main(String[] args)
{
Printer printer = new Printer("Natasha");

Thread thread1 = new Thread(printer);
thread1.start();

Thread thread2 = new Thread(printer);
thread2.start();

Thread thread3 = new Thread(printer);
thread3.start();
}
๋‹จ์ผ ํ”„๋ฆฐํ„ฐ ๊ฐœ์ฒด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ธ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ๋ชจ๋“  ๊ฒƒ์„ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Thread ํด๋ž˜์Šค๋Š” Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜๋ฏ€๋กœ ํ•ด๋‹น run ๋ฉ”์„œ๋“œ ๋งŒ ์žฌ์ •์˜ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค .

์ƒˆ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•
class Printer extends Thread
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("Iโ€™m " + this.name);
}
}
Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” Thread ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•œ ๋‹ค์Œ run ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
public static void main(String[] args)
{
Printer printer = new Printer("Jack");
printer.start();

Printer printer2 = new Printer("Jack");
printer2.start();

}
๊ฐ๊ฐ ๊ณ ์œ ํ•œ Printer ๊ฐœ์ฒด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

"์ด๊ฒƒ์€ ๋ณด๋‹ค ์šฐ์•„ํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค."

"์˜ˆ, ํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค."

1)  Natasha์˜ ์˜ˆ์—์„œ์™€ ๊ฐ™์ด ๋‹จ์ผ ๊ฐœ์ฒด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2)  Thread ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์€ ๊ฒฝ์šฐ ํด๋ž˜์Šค์— ๋‹ค๋ฅธ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

3)  ํด๋ž˜์Šค์— ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์Šค๋ ˆ๋“œ๋ฅผ ๋‘ ๋ฒˆ์งธ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

"์ฆ‰, ์‹œ์ž‘ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ ํ›„ ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ์ƒ์„ฑ์ž์—๊ฒŒ ์ „๋‹ฌ๋œ ๊ฐœ์ฒด์˜ ์‹คํ–‰ ๋ฉ”์„œ๋“œ ์‹คํ–‰์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๊นŒ?"

"์˜ˆ. ์ƒ์„ฑ์ž์— ์•„๋ฌด ๊ฒƒ๋„ ์ „๋‹ฌ๋˜์ง€ ์•Š์œผ๋ฉด Thread๋Š” ๋‚ด๋ถ€ ์‹คํ–‰ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค."

"ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์™œ ์ด๋ ‡๊ฒŒ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?"

์•”ํ˜ธ
public static void main(String[] args)
{
 Printer printer1 = new Printer("Nick");
 printer1.run();
}

"๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ run ๋ฉ”์„œ๋“œ ์— ๋„๋‹ฌํ•˜๋ฉด "์ž‘์€ ๋กœ๋ด‡" ์ด ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ€ ๋‚ด๋ถ€์˜ ๋ชจ๋“  ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰๋œ ํ›„์—์•ผ ๋ฉ”์ธ ๋ฉ”์„œ๋“œ๋กœ ๋Œ์•„๊ฐ€์„œ ์ถ”๊ฐ€ ๋ช…๋ น ์‹คํ–‰์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‘ ๋ฒˆ์งธ๋Š” ์—†์Šต๋‹ˆ๋‹ค. " ์ž‘์€ ๋กœ๋ด‡"์ด ๋งŒ๋“ค์–ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž‘์—…์ด ๋ณ‘๋ ฌ(๋™์‹œ์—)์ด ์•„๋‹Œ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค."

"์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ์ด์™ธ์˜ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?"

"์•„๋‹ˆ์š”. ๋ชจ๋‘ Runnable ์ธํ„ฐํŽ˜์ด์Šค์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” run() ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•ด์„œ๋งŒ "์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ."