한 번에 끝내는 Java/Spring 웹 개발 마스터
여러 thread가 동시에 수행되는 프로그래밍, 여러 작업이 동시에 실행되는 효과를 뜻한다.
각 thread 사이에서 공유하는 자원이 있을 수 있음 (자바에서는 static instance)
package ch20;
class MyThread extends Thread {
//Thread는 따로 구현해야 할 메소드가 반드시 있는건 아님.
//Thread를 상속받아서 모든 메소드 사용이 가능하다.
public void run() {
int i;
for(i = 1; i<=200; i++) {
System.out.print(i + "\t");
}
}
}
public class ThreadTest {
public static void main(String[] args) {
System.out.println( Thread.currentThread() + "Start" ); //메인스레드 -> 1개
MyThread th1 = new MyThread(); //Thread1 -> 2개
MyThread th2 = new MyThread(); //Thread2 - > 3개
th1.start();
th2.start();
System.out.println( Thread.currentThread() + "End" );
}
}
package ch20;
class MyRunnable implements Runnable {
//Runnalbe의 경우에는 Start가 바로 불가능 (Start는 Thread의 메소드)
public void run() {
int i;
for(i = 1; i<=200; i++) {
System.out.print(i + "\t");
}
}
}
public class ThreadRunnable {
public static void main(String[] args) {
System.out.println( Thread.currentThread() + "Start" ); //메인스레드 -> 1개
MyRunnable runnable = new MyRunnable();
Thread th1 = new Thread(runnable);
Thread th2 = new Thread(runnable);
th1.start();
th2.start();
System.out.println( Thread.currentThread() + "End" );
}
}
자바는 다중 상속을 허용하지 않기 때문에, 이미 다른 클래스를 상속하고 있는 경우, thread를 만들기 위해서 Runnable Interface를 구현해서 실행한다.
사실, Thread에 대한 부분은 이해하기 어려웠다. 내가 이해하는 방식으로는 Runnable 인터페이스 안에서 여러개의 thread가 존재할 수 있고, 순서에 맞게 strat()를 통해서 run()할 수 있는 구조로 생각했다.