Single Thread
는 말 그대로 하나의 Thread를 사용하는 것이다.
단일 쓰레드를 사용하는 프로세스는 별도로 쓰레드를 관리하는 번거로움이 없어서 코딩은 용이하겠지만, 작업시간이 낭비되는 경우가 생긴다.
[Sample Code]
public class T05_ThreadTest {
public static void main(String[] args) {
Thread th1 = new Thread();
String input = JOptionPane.showInputDialog("아무거나 입력하세요.");
int i=10;
while(i != 0) {
System.out.println(i--);
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("카운트가 종료되었습니다.");
}
}
위의 코드에서는 사용자가 입력을 하지않으면, 카운트다운이 시작되지 않는다.
사용자의 입력을 요구하는 Dialog가 생성되고, 사용자가 입력하기 전 까지 아무런 작업도 하지않는 버려지는 시간이 발생하는 것이다.
하지만 Multi Thread
를 사용하면 버려지는 시간을 효율적으로 사용 할 수 있다.
Multi Thread
는 하나의 프로세스에 여러개의 쓰레드를 사용하여 작업을 처리하거나, 여러개의 프로세스에 여러개의 쓰레드를 사용하는 것을 의미한다.
다중 쓰레드의 장점은 이전 포스팅에 설명되어있다.
다중 쓰레드를 사용하면 단일 쓰레드보다 어떤점이 좋은지 예제를 통해서 살펴보려고 한다.
[Sample Code]
public class T06_ThreadTest {
public static void main(String[] args) {
ThreadTest_1 th1 = new ThreadTest_1();
th1.start();
String input = JOptionPane.showInputDialog("아무거나 입력하세요");
System.out.println("입력값 : " + input);
th1.interrupt();
}
}
class ThreadTest_1 extends Thread {
@Override
public void run() {
int i = 10;
while(i!=0 && !isInterrupted()) {
System.out.println(i--);
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
interrupt();
}
}
System.out.println("카운트가 종료되었습니다.");
}
}
위의 예제에서는 두 개의 쓰레드를 사용하여 작업을 동시에 처리하는 예제이다.
Thread를 상속한 클래스를 하나만 생성했기때문에 단일 쓰레드라고 오해할 수 있지만, Main Thread까지 사용하기 때문에 두 개의 쓰레드를 사용하는 것이다.
위에서 사용된 interrupt
는 실행중인 쓰레드에게 작업중단을 요청하는 것이고 Sleep
은 실행중인 쓰레드를 잠깐 멈추는 메서드이다.
Sleep
은 단위가 ms
이기 때문에 1초를 멈추려면 1000
으로 값을 넣어야 한다. (1ms = 0.001초)
위의 코드에서는 사용자의 입력을 요청하는 Dialog가 생성되고, 사용자가 입력을 하지않아도 카운트다운이 시작된다.
그렇기때문에 단일 쓰레드를 사용하는 것보다 멀티쓰레드를 사용하는것이 작업시간을 더욱 효율적으로 사용할 수 있다.
위에서 살펴본 예제를 보면 단일 쓰레드를 사용하는 이유를 모르겠다.
프로그램을 병렬적으로 처리하여 향상된 사용자 응답을 제공하고, 자원을 효율적으로 사용하는 다중 쓰레드를 놔두고 왜 단일 쓰레드를 사용할까?
여러가지 이유가 있겠지만 여기서는 3가지 정도의 이유를 들어보려고 한다 (개인적인 생각)