Java

128. 싱글쓰레드와 멀티쓰레드, 쓰레드의 I_O블락킹 - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 1. 6. 15:29

1. main쓰레드

  • main메서드의 코드를 수행하는 쓰레드
  • 쓰레드는 '사용자 쓰레드'(main)와 '데몬 쓰레드'(보조) 두 종료가 있다.
    • 실행 중인 사용자 쓰레드가 하나도 없을 때 프로그램은 종료된다.
public class Ex02 {
    static long startTime = 0;
    public static void main(String[] args) {
        ThreadEx11_1 th1 = new ThreadEx11_1();
        ThreadEx11_2 th2 = new ThreadEx11_2();

        th1.start();
        th2.start();
        startTime = System.currentTimeMillis();

        try{
            th1.join(); // main쓰레드가 th1의 작업이 끝날 때까지 기다린다.
            th2.join(); // main쓰레드가 th2의 작업이 끝날 때까지 기다린다.
        } catch (InterruptedException e) {}

        System.out.print("소요시간:"+(System.currentTimeMillis()-startTime));
    }
}

class ThreadEx11_1 extends Thread {
    public void run() {
        for (int i = 0; i < 300; i++) {
            System.out.print(new String("-"));
        }
    }
}

class ThreadEx11_2 extends Thread {
    public void run() {
        for (int i = 0; i < 300; i++) {
            System.out.print(new String("|"));
        }
    }
}

 

2. 쓰레드의 I/O블락킹(blocking) - 입출력시 작업중단

class ThreadEx6 {
    public static void main(String[] args) {
        String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
        System.out.println("입력하신 값은 " + input + "입니다.");

        for(int i = 10; i > 0; i--) {
            System.out.println(i);
            try { Thread.sleep(1000); } catch(Exception e) {}	// 카운트다운
        }
    }
}
  • 멀티쓰레드
class ThreadEx7 {
    public static void main(String[] args) {
        ThreadEx7_1 th1 = new ThreadEx7_1();
        th1.start();
        
        String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
        System.out.println("입력하신 값은 " + input + "입니다.");
    }
}

class ThreadEx7_1 extends Thread {
    public void run() {
        for(int i = 10; i > 0; i--) {
            System.out.println(i);
            try { Thread.sleep(1000); } catch(Exception e) {}	// 카운트다운
        }
    }
}