๐Ÿ€ Java/์ž๋ฐ”์™„์ „์ •๋ณต

[Java] ์“ฐ๋ ˆ๋“œ, ์“ฐ๋ ˆ๋“œ์˜ ์†์„ฑ, ๋ฐ๋ชฌ์“ฐ๋ ˆ๋“œ

._.sori 2025. 5. 20. 13:58

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ํ”„๋กœ๊ทธ๋žจ,  ํ”„๋กœ์„ธ์Šค, ์“ฐ๋ ˆ๋“œ_ 511p

 

• CPU 

: ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ์žฅ์น˜๋กœ, ๊ฐ€์žฅ ๋น ๋ฅธ ์†๋„๋กœ ๋™์ž‘.

 

 ํ•˜๋“œ๋””์Šคํฌ

: ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ€์žฅ ๋‚ฎ์€ ์†๋„๋กœ ๋™์ž‘.

 

 ๋ฉ”๋ชจ๋ฆฌ

: ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ CPU๋กœ ๋ณด๋‚ด๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, CPU์™€ ๊ทผ์ ‘ํ•œ ์†๋„๋กœ ๋™์ž‘.

 

 ํ”„๋กœ๊ทธ๋žจ

: ํ•˜๋“œ๋””์Šคํฌ์— ์ €์žฅ๋œ ํŒŒ์ผ๋“ค์˜ ๋ชจ์ž„.

 

ํ”„๋กœ์„ธ์Šค

: ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ๋กœ๋”ฉ๋œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ์„ ๋™์ ์œผ๋กœ ๋กœ๋”ฉ.

 

 ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค

: ํ•˜๋‚˜์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ .

 

 ์“ฐ๋ ˆ๋“œ

: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์—…์ด ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•œ์ •๋œ ์ฝ”์–ด์˜ ์ˆ˜๋ฅผ ๊ฐ–๋Š” CPU์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์—…์„ ๋‚˜๋ˆ  ์‚ฌ์šฉํ•˜๋ฉฐ, CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์†Œ ๋‹จ์œ„.

 

 ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ

public class ThreadExample01 {
    public static void main(String[] args) {
    
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        
        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค. ์ฒซ๋ฒˆ์งธ for๋ฌธ๊ณผ ๋‘๋ฒˆ์งธ for๋ฌธ์ด ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ๋‚˜์˜ค๊ธธ ์›ํ–ˆ์ง€๋งŒ ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ๋กœ ์ฒซ๋ฒˆ์งธ for์ด ๋ชจ๋‘ ์ˆ˜ํ–‰๋œ ๋‹ค์Œ ๋‘๋ฒˆ์งธ for๋ฌธ์ด ์ˆ˜ํ–‰๋œ๋‹ค.

 

 

 

 ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ

: ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ

 

 

โ‘  extends Thread + 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ

class Task1 extends Thread {
    @Override
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Task2 extends Thread {
    @Override
    public void run() {
        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadExample02 {
    public static void main(String[] args) {
        Task1 t1 = new Task1(); 
        Task2 t2 = new Task2(); 

        t1.start();
        t2.start(); 
    }
}
์“ฐ๋ ˆ๋“œ์—๋Š” ๋™์‹œ์„ฑ(concurrency)๊ณผ ๋ณ‘๋ ฌ์„ฑ(parallelism)์ด ์žˆ๋‹ค. ๋™์‹œ์„ฑ์€ ์ฒ˜๋ฆฌํ•  ์ž‘์—…์˜ ์ˆ˜๊ฐ€ CPU์˜ ์ฝ”์–ด ์ˆ˜๋ณด๋‹ค ๋งŽ์„ ๋•Œ ๊ฐ ์ž‘์—…์˜ ์“ฐ๋ ˆ๋“œ์˜ ์š”์ฒญ ์ž‘์—…์„ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰ํ•œ๋‹ค. ๋งค์šฐ ์งง์€ ๊ฐ„๊ฒฉ์œผ๋กœ ๊ต์ฐจ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋Š” ๋‘ ์ž‘์—…์ด ๋งˆ์น˜ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค. ๋ณ‘๋ ฌ์„ฑ์€ CPU์˜ ์ฝ”์–ด ์ˆ˜๊ฐ€ ์ž‘์—… ์ˆ˜๋ณด๋‹ค ๋งŽ์„ ๋•Œ๋กœ ๊ฐ๊ฐ์˜ ์ž‘์—…์„ ๊ฐ๊ฐ์˜ ์ฝ”์–ด์— ํ• ๋‹นํ•ด ๋™์‹œ์— ์‹คํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค. 

์—ฌ๋Ÿฌ ์ž‘์—…์ด ์žˆ๊ณ  ์—ฌ๋Ÿฌ CPU๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋А ์ž‘์—…์„ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ ์ง„ํ–‰ํ• ๊ฑด์ง€ ์ฝ”๋“œ๋กœ ์ ์–ด๋‘๋ฉด ๋œ๋‹ค. ๊ทธ ๋‹ค์Œ JVM์ด ์šด์˜์ฒด์ œ๋กœ ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋ฅผ ๋„˜๊ธฐ๊ณ  ์šด์˜์ฒด์ œ๋Š” ๊ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์–ด๋А CPU์— ๋ฐฐ๋ถ„ํ• ์ง€ ์•Œ์•„์„œ ์ •ํ•œ๋‹ค. (๋ณดํ†ต ๋ฐฐ๋ถ„์€ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํ•œ๋‹ค)

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž. extends Thread๋กœ Thread๋ฅผ ์ƒ์†๋ฐ›์•˜๊ณ  Thread ๋‚ด๋ถ€์—” run( )๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ Thread๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์— run( ) ๋ฉ”์„œ๋“œ ์•ˆ์— ์–ด๋–ค ๋™์ž‘์„ ์ˆ˜ํ–‰ํ• ์ง€ ์žฌ์ •์˜ํ•˜๋ฉด ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋˜์–ด Thread์—์„œ ์žฌ์ •์˜ํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

์“ฐ๋ ˆ๋“œ์—์„œ ํŠน์ดํ•œ ์ ์ด ์žˆ๋‹ค. ๋ฉ”์„œ๋“œ run์„ ์žฌ์ •์˜ํ–ˆ์œผ๋‹ˆ run์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋ ํ…๋ฐ, run( )์ด ์•„๋‹Œ start( )๊ฐ€ ์ ํ˜€์žˆ๋‹ค. ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹ค์ œ CPU์™€ ์ด์•ผ๊ธฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž์‹ ๋งŒ์˜ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์— ํฌํ•จํ•ด ์ค€๋น„ํ•ด์•ผ ํ•  ๊ฒƒ์ด ๋งŽ๋‹ค. ์—ฌ๊ธฐ์„œ start ๋ฉ”์„œ๋“œ๊ฐ€ ์ค€๋น„๋‹จ๊ณ„ ํฌํ•จํ•œ run ๋ฉ”์„œ๋“œ ์‹คํ–‰์„ ์˜๋ฏธํ•œ๋‹ค. start( )๋Š” ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ/์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ์ค€๋น„ + ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ ์œ„์— run( ) ์‹คํ–‰์ด๋‹ค.

 

 

 

โ‘ก extends Thread + 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ

class MyThread extends Thread {
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadExample03 {
    public static void main(String[] args) {
        MyThread t = new MyThread(); 
        t.start();

        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
์•ž์— ์žˆ์—ˆ๋˜ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๊ทธ์ € for๋ฌธ๋งŒ ์žˆ์—ˆ๋Š”๋ฐ ๋‹จ์ผ์“ฐ๋ ˆ๋“œ, extends Thread๊ฐ€ 2๊ฐœ์˜€๋Š”๋ฐ ์ด 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์˜€๊ณ , ์ด๋ฒˆ ์ฝ”๋“œ๋Š” extends Thread๊ฐ€ 1๊ฐœ์ธ๋ฐ ์ด 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์ด๋‹ค. ๊ทธ ์ด์œ ๋ฅผ ์‚ดํŽด๋ณด๋ฉด main์— ์žˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ JVM์€ ์ž๋™์œผ๋กœ main ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด๋‹น ์ฝ”๋“œ main์— ์ ์–ด๋‘” for๋ฌธ์ด ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

โ‘ข Runnable + 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ

class Task1 implements Runnable {
    @Override
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Task2 implements Runnable {
    @Override
    public void run() {
        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadExample04 {
    public static void main(String[] args) {
        Runnable task1 = new Task1();
        Thread t1 = new Thread(task1);
        t1.start();
        
        Runnable task2 = new Task2();
        Thread t2 = new Thread(task2);
        t2.start();
    }
}
Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ , run( ) ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์“ฐ๋ ˆ๋“œ์˜ ์ž‘์—… ๋‚ด์šฉ์„ ์ž‘์„ฑํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  main์—์„œ Runnable ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

extends Thread์™€ ์ฐจ์ด์ ์ด ์žˆ๋‹ค. ๋ฐ”๋กœ Runnable ๊ฐ์ฒด์˜ ๋‚ด๋ถ€์—๋Š” start( ) ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.  ๊ทธ๋ž˜์„œ main์„ ๋ณด๋ฉด start( )๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Thread ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ Thread ๊ฐ์ฒด๋กœ ๊ฐ์‹ธ start( )๋ฅผ ํ˜ธ์ถœํ–ˆ๋‹ค. 

Runnable๋กœ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ์˜ ์žฅ์ ์€ ์ธํ„ฐํŽ˜์ด์Šค๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ƒ์†์€ ํ•œ ๋ฒˆ๋งŒ ๋˜๋Š”๋ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์†ํ•ด๋ฒ„๋ฆฌ๋ฉด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค. 

 

 

 

 


 

 

 

โœ”๏ธ   ์“ฐ๋ ˆ๋“œ์˜ ์†์„ฑ_ 527p

 

• currentThread( )

: ์—ฐ์‚ฐ์„ ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ ๊ฐ์ฒด์˜ ์ฐธ์ขƒ๊ฐ’์„ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

new Thread(() -> {
    System.out.println("์ž‘์—… ์‹œ์ž‘");
}).start();
System.out.println("main ์Šค๋ ˆ๋“œ ์ด๋ฆ„: " + Thread.currentThread().getName());
 
 or
 
Thread current = Thread.currentThread()
System.out.println("ํ˜„์žฌ ์Šค๋ ˆ๋“œ ์ด๋ฆ„: " + current.getName());
์œ„์˜ ์ฝ”๋“œ๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜ ์—†์ด ์‹คํ–‰ํ•œ ์ฝ”๋“œ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ฐธ์กฐ ๋ณ€์ˆ˜ ์—†์ด ์ผํšŒ์„ฑ์œผ๋กœ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ .getName( ) ๊ฐ™์€ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ static Thread Thread.currentThread( )๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ ๊ฐ์ฒด ์ฐธ์ขƒ๊ฐ’์„ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

• activeCount( )

: ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์“ฐ๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

public class ThreadExample05 {
    public static void main(String[] args) {

        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 1 ์‹คํ–‰ ์ค‘");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 1 ์ข…๋ฃŒ");
            }
        });

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 2 ์‹คํ–‰ ์ค‘");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 2 ์ข…๋ฃŒ");
            }
        });

        Thread t3 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 3 ์‹คํ–‰ ์ค‘");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 3 ์ข…๋ฃŒ");
            }
        });

        t1.start();
        t2.start();
        t3.start();
    }
}
System.out.println("ํ˜„์žฌ ํ™œ์„ฑ ์Šค๋ ˆ๋“œ ์ˆ˜: " + Thread.activeCount());
main ์“ฐ๋ ˆ๋“œ ๋‚ด์—๋Š” ์ด 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐ™์€ ๊ทธ๋ฃน ๋‚ด์—์„œ ์‹คํ–‰ ์ค‘์ธ ์“ฐ๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ๊ณ ์‹ถ์„ ๋•Œ activeCount๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

• setName( )

: ์“ฐ๋ ˆ๋“œ์— ์ง์ ‘ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•œ๋‹ค.

Thread t1 = new Thread(task);
Thread t2 = new Thread(task);

t1.setName("1๋ฒˆ");
t2.setName("2๋ฒˆ");

 

 

 

• getName( )

: ์ง์ ‘ ์ง€์ •ํ–ˆ๊ฑฐ๋‚˜ ์ž๋™์œผ๋กœ ๋ถ€์—ฌ๋œ ์“ฐ๋ ˆ๋“œ์˜ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜จ๋‹ค.

for(int i=0; i<3; i++){
    Thread t1 = new Thread();
    t1.setName(i + "๋ฒˆ์งธ ์“ฐ๋ ˆ๋“œ");
    System.out.println(t1.getName());
    t1.start();
}

 

 

 

• ์šฐ์„ ์ˆœ์œ„

public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;
void setPriority(int priority)
int getPriority()
๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋Š” 1~10 ์‚ฌ์ด์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 1์ด ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆœ์œ„์ด๋ฉฐ 10์ด ๊ฐ€์žฅ ๋†’์€ ์ˆœ์œ„๋‹ค. ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 5์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค. ์šฐ์„ ์ˆœ์œ„๋Š” ์“ฐ๋ ˆ๋“œ์˜ ๋™์‹œ์„ฑ๊ณผ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค. ๋งŒ์ผ 2๊ฐœ์˜ ์ž‘์—…์ด ์ผ์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ์ชฝ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ๋‹น๋ฐ›๊ฒŒ ๋œ๋‹ค.

setPriority( )๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ณ , getPriority( )๋Š” ์ง€์ •๋œ ์šฐ์„ ์ˆœ์œ„ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ๋‹ค.

 

 

 

• availableProcessors

ํ˜„์žฌ ์ปดํ“จํ„ฐ์˜ CPU ์ฝ”์–ด ์ˆ˜๋ฅผ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

public native int availableProcessors();

 

 

 

 


 

 

 

โœ”๏ธ  ๋ฐ๋ชฌ ์„ค์ •_ 533p

 

• ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ

: ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ชจ๋‘ ์ข…๋ฃŒ๋˜๋ฉด ํ•จ๊ป˜ ์ข…๋ฃŒ๋˜๋Š” ์“ฐ๋ ˆ๋“œ

Thread t1 = new MyThread();
t1.setDeamon(false);
t1.setName("t1");
t1.start();

Thread t2 = new MyThread();
t2.setDeamon(true);
t2.setName("t2");
t2.start();

try{Thread.sleep(3500);} catch (InterruptedException e) {}
System.out.println("main Thread ์ข…๋ฃŒ");
์“ฐ๋ ˆ๋“œ์˜ ๋ฐ๋ชฌ ์„ค์ •์€ Thread ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์ธ setDeamon( )๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ ๊ธฐ๋ณธ ๊ฐ’์€ false๋กœ ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๋กœ ์„ค์ •ํ•ด๋‘”๋‹ค. ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๋ฐ๋ชฌ ์„ค์ • ์—ฌ๋ถ€๋Š” isDeamon( )๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์–ธ์ œ๋“ ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ์—์„  ์“ฐ๋ ˆ๋“œ t1์€ ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ, t2๋Š” ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋กœ ์„ค์ •ํ–ˆ๋‹ค.

๋ฐ๋ชฌ ์„ค์ •์€ ๋ฐ˜๋“œ์‹œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์ธ start( ) ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „์— ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ ๊ฐ€๋ฉด ๋ฐ๋ชฌ ์„ค์ •์€ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. 

๋งŒ์•ฝ main์— ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ t1๊ณผ ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ t2๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋Š” ์ž์‹ ์„ ํ˜ธ์ถœํ•œ main ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ•จ๊ป˜ ์ข…๋ฃŒ๋ ๊ฑฐ๋ผ ์˜ˆ์ƒํ•˜๊ฒ ์ง€๋งŒ ๋ฐ๋ชฌ์“ฐ๋ ˆ๋“œ๋Š” ์ฃผ ์“ฐ๋ ˆ๋“œ์˜ ์ข…๋ฃŒ๊ฐ€ ์•„๋‹Œ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋ชจ๋“  ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์–ด์•ผ ์ข…๋ฃŒ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์•ผํ•œ๋‹ค. main์ด ๋จผ์ € ๋๋‚ด๋„ t1 ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ผ๋ฉด t2๋Š” ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค.