๋‚˜๋งŒ์˜ ์˜ค๋ž˜๋‹ฌ๋ฆฌ๊ธฐ๋ฅผ ํ•˜๋Š” ์‚ฌ๋žŒ

Become a ghost

Programming - Language/JAVA

[JAVA] ์ž๋ฐ” ์Šค๋ ˆ๋“œ (Thread) ๋ž€?

jennnnna 2024. 7. 4. 00:39

๋™์ž‘ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ํ”„๋กœ์„ธ์Šค (Process) ๋ผ๊ณ  ํ•œ๋‹ค. 
ํ•œ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ํ•œ ๊ฐ€์ง€์˜ ์ผ์„ ํ•˜์ง€๋งŒ 
์Šค๋ ˆ๋“œ(Thread) ๋ฅผ ์ด์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ผ์„ ๋™์‹œ์— ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. 

public class Sample extends Thread {
    public void run() {  // Thread ๋ฅผ ์ƒ์†ํ•˜๋ฉด run ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
        System.out.println("thread run.");
    }
    
    
        public static void main(String[] args) {
        Sample sample = new Sample();
        sample.start();  // start()๋กœ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
    }
}

์–ด๋–ค ํด๋ž˜์Šค์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์† ๋ฐ›์œผ๋ฉด run () ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. 
main ๋ฉ”์†Œ๋“œ์—์„œ start ํ•ด์ค€๋‹ค. 
๋ฉ”์ธ ๋ฉ”์†Œ๋“œ์—์„œ start ๋ฅผ ํ•ด์ฃผ๋Š” ์ˆœ๊ฐ„, ์Šค๋ ˆ๋“œ์— ์žˆ๋Š” run ์ด ์ž‘๋™๋˜๋Š” ์›๋ฆฌ์ด๋‹ค. 

๋ฉ”์ธ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ์Šค๋ ˆ๋“œ๋Š” ๋™์ž‘ํ•œ๋‹ค. 
๋™์‹œ์— ์‹œ์ž‘ํ•ด๋„ ์ˆœ์„œ๋Š” ๋ณด์žฅ๋˜์ง€ ์•Š๊ณ , ๋˜‘๊ฐ™์ด ๋™์ž‘ํ•˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— 10๊ฐœ๋ฅผ ์‹คํ–‰์‹œ์ผฐ์„ ๋•Œ 
์–ด๋–ค ์Šค๋ ˆ๋“œ๊ฐ€ ๋จผ์ € ๋๋‚ ์ง€๋Š” ๋ชจ๋ฆ„. 

์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ์œผ๋ฉด ?
join ์„ ๊ฑธ๋ฉด ๋œ๋‹ค. 

import java.util.ArrayList;

public class Sample extends Thread {
    int seq;
    public Sample(int seq) {
        this.seq = seq;
    }

    public void run() {
        System.out.println(this.seq+" thread start.");
        try {
            Thread.sleep(1000);
        }catch(Exception e) {
        }
        System.out.println(this.seq+" thread end.");
    }

    public static void main(String[] args) {
        ArrayList<Thread> threads = new ArrayList<>();
        for(int i=0; i<10; i++) {
            Thread t = new Sample(i);
            t.start();
            threads.add(t);
        }

        for(int i=0; i<threads.size(); i++) {
            Thread t = threads.get(i);
            try {
                t.join(); // t ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
            }catch(Exception e) {
            }
        }
        System.out.println("main end.");
    }
}

์Šค๋ ˆ๋“œ ๊ฐ์ฒด t ํ•˜๋‚˜์”ฉ ์‹คํ–‰๋œ๋‹ค. 
๊ฐ ์Šค๋ ˆ๋“œ ์•ˆ์— ์žˆ๋Š” run () ์‹คํ–‰์ด ์™„๋ฃŒ ๋˜๋ฉด ๊ทธ ๋‹ค์Œ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ ๋จ. 

 

tcp ํ†ต์‹ ์œผ๋กœ ์ž๋ฐ” ์ฝ˜์†”์ฐฝ์— ์ฑ„ํŒ…๋ฐฉ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š”๋ฐ 
์Šค๋ ˆ๋“œ ๊ฐœ๋…์„ ํ—ท๊ฐˆ๋ คํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ์Šค๋ ˆ๋“œ ๊ฐœ๋…๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ดค๋‹ค. 
๊ทผ๋ฐ ์ฑ„ํŒ…๋ฐฉ ๊ตฌํ˜„ํ•  ๋•Œ join ์“ธ ์ผ์€ ์—†์—ˆ๋˜ ๊ฑฐ ๊ฐ™์€๋ฐ..