쓰레드가 입출력(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