쓰레드(Thread)
이제는 쓰레드는 프로세스 여러 개가 동시에 같이 동작하게 하는 방법입니다. 인터넷 온라인 게임을 생각해 보면 쉽습니다.
각 쓰레드가 준비 또는 동작하고 있다가 어떤 이벤트에 의해 동작하도록 하는 것입니다.
채팅 프로그램 같은 경우에는 멀티쓰레드를 사용합니다.
참고로 파일 I/O나 데이터베이스를 제어할 때는 반드시 try~catch문을 사용해야 합니다.
아래 예제는 멀티 쓰레드를 사용하는 예제입니다. 일반적으로 main()이 포함된 클래스는 맨 마지막에 작성하는 것이 편리합니다.
■ MultiThreadMain.java
package firstpackage;
public class MultiThreadMain {
public static void main(String[] args) {
Thread thread1 = new DigitThread(); //DigitThread가 Thread를 상속 받았기 때문에 가능
Thread thread2 = new StringThread();
thread1.start();
thread2.start();
System.out.println("끝~~~~~~");
}
}
■ DigitThread.java
package firstpackage;
public class DigitThread extends Thread {
// Thread를 상속받는다.
// 멀티 상속은 안되며 멀티상속은 인터페이스를 사용하면 됩니다.
public void run(){
for(int i=1; i<101; i++){
System.out.println(i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
메소드 run()은 처음에 다른 이름으로 주고 테스트를 진행한 후에 이상이 없을 때 바꿉니다.
■ StringThread.java
package firstpackage;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class StringThread extends Thread{
public void run(){
try {
FileReader reader = new FileReader("c:/test.txt");
//파일 입출력,DB 읽을 때 try문 반드시 포함해야 함
while(true){
int data = 0;
try {
data=reader.read();
} catch (IOException e){
e.printStackTrace();
}
char ch=(char)data;
if(data == -1) // 데이터가 없으면의 뜻.
break;
System.out.println(ch);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
System.out.println(e);
}
}
}
C드라이브의 루트에 메모장으로 test.txt 파일을 생성한 후 몇 줄의 내용을 입력해 놓아야 합니다.