쓰레드의 I/O 블락킹(blocking)

NOAH·2021년 1월 27일
0
post-thumbnail


쓰레드가 입출력(I/O) 처리를 위해 기다리는 것을 I/O 블락킹이라고 해요.


package chapter13;
import javax.swing.JOptionPane;

public class Ex13_4 {
   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) {}
       }

   }
}

입력값을 받기 전에는 10부터 1까지 세지 않아요.


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

그러나 블락킹 시간동안 멀티쓰레드를 이용하면 자원을 좀 더 효율적으로 쓸 수가 있어요.


package chapter13;
import javax.swing.JOptionPane;


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

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

class ThreadEx5_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
8
입력하신 값은 null 입니다.
7
6
5
4
3
2
1

0개의 댓글