Notice
Recent Posts
Recent Comments
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

싱글 쓰레드와 멀티 쓰레드, 쓰레드의 I/O 블락킹(blocking) 본문

Java/JAVA3

싱글 쓰레드와 멀티 쓰레드, 쓰레드의 I/O 블락킹(blocking)

빌드이너프 2023. 8. 3. 09:48

싱글 쓰레드와 멀티 쓰레드

싱글 쓰레드

class ThreadTest {
    public static void main(String[] args) {
        for(int i = 0; i<300; i++) {
            System.out.println("-");
        }

        for(int i = 0; i<300; i++) {
            System.out.println("ㅣ");
        }
    }
}

코드

class ThreadTest {
    public static void main(String args[]) {
        long startTime = System.currentTimeMillis();

        for(int i=0; i < 300; i++)
            System.out.printf("%s", new String("-"));
        System.out.print("소요시간1:" +(System.currentTimeMillis()- startTime));

        for(int i=0; i < 300; i++)
            System.out.printf("%s", new String("|"));
        System.out.print("소요시간2:"+(System.currentTimeMillis() - startTime));
    }
}

 

 

멀티 쓰레드

th1과 th2의 순서는 OS 스케줄러가 결정하기 때문에 마음대로 할 수 없다

class ThreadTest {
    public static void main(String args[]) {
        MyThread1 th1 = new MyThread1();
        MyThread2 th2 = new MyThread2();
        th1.start();
        th2.start();
    }
}

class MyThread1 extends Thread {
    public void run() {
        for(int i=0; i<300; i++) {
            System.out.println("-");
        }
    } // run()
    
class MyThread2 extends Thread {
    public void run() {
        for(int i=0; i<300; i++) {
            System.out.println("ㅣ");
        }
    } // run()
}

 

코드

class ThreadTest {
    static long startTime = 0;

    public static void main(String args[]) {
        ThreadEx3_1 th1 = new ThreadEx3_1();
        th1.start();
        startTime = System.currentTimeMillis();

        for(int i=0; i < 300; i++)
            System.out.printf("%s", new String("-"));

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

class ThreadEx3_1 extends Thread {
    public void run() {
        for(int i=0; i < 300; i++)
            System.out.printf("%s", new String("|"));

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


쓰레드의 I/O 블락킹

싱글 쓰레드

class ThreadTest {
    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);  // 1초간 시간을 지연한다.
            } catch(Exception e) {}
        }
    }
}

 

코드

입력하기 전까지 println()와 for()문으로 넘어가지 못한다

import javax.swing.JOptionPane;

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

        for(int i=10; i > 0; i--) {
            System.out.println(i);
            try {
                Thread.sleep(1000);  // 1초간 시간을 지연한다.
            } catch(Exception e ) {}
        }
    }
}


입력하신 값은 12입니다.
10
9
8
7
6
5
4
3
2
1

 

 

멀티 쓰레드

이때는 입력을 기다릴 때 th2가 실행되기 때문에 아무것도 안하는 싱글 쓰레드보다 멀티 쓰레드가 작업이 먼저 끝나게 된다

class ThreadTest {
    public static void main(String[] args) {
        ThreadTest_1 th1 = new ThreadTest_1();
        th1.start();

        String input = JOptionPane.showInputDialog("아무 값이나 입력하세요."); 
        System.out.println("입력하신 값은 " + input + "입니다.");
    }
}

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

 

코드

import javax.swing.JOptionPane;

class ThreadTest {
    public static void main(String[] args) throws Exception  {
        ThreadTest_1 th1 = new ThreadTest_1();
        th1.start();

        String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
        System.out.println("입력하신 값은 " + input + "입니다.");
    }
}

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


10
9
2023-08-03 09:46:52.271 java[34291:117197] TSM AdjustCapsLockLEDForKeyTransitionHandling - _ISSetPhysicalKeyboardCapsLockLED Inhibit
8
7
6
5
4
3
입력하신 값은 12입니다.
2
1

'Java > JAVA3' 카테고리의 다른 글

데몬 쓰레드(daemon thread), 쓰레드의 상태  (0) 2023.08.03
쓰레드의 우선순위, 쓰레드 그룹  (0) 2023.08.03
main 쓰레드  (0) 2023.08.03
쓰레드의 구현과 실행  (0) 2023.08.02
thread 쓰레드  (0) 2023.08.02