Java에서 Thread 구현하는 방법
Java에서 제공하는 Thread 클래스를 이용(상속)
run() 메서드에 작성된 코드가 쓰레드가 수행할 작업
- Java는 다중 상속을 지원하지 않기 때문에 Thread 클래스를 상속받아서 처리하는 방법은 확장성이 매우 떨어진다.
// Thread Claas를 이용
public class TestThread extends Thread {
// 쓰레드에서 수행할 작업
@Override
public void run() {
// 쓰레드 수행작업
}
}
...
// Thread를 생성해서 실행
TestThread thread = new TestThread(); // 쓰레드 생성
thread.start() // 쓰레드 실행
Java에서 제공하는 Runnable 인터페이스를 활용
run() 메서드에 작성된 코드가 쓰레드가 수행할 작업
- Runnable은 Tread클래스와 다르게 인터페이스이기 때문에 확정성에 매우 유리하다.
public class TestRunnable implements Runnable {
@Override
public void run() {
// 쓰레드에서 수행할 작업 정의
}
}
...
// Runnable 인터페이스를 구현해 Thread를 생성해서 실행
Runnable run = new TestRunnable();
Thread thread = new Thread(run); // 쓰레드 생성
thread.start(); // 쓰레드 실행
람다식으로 Thred 생성
- 쓰레드를 만들고 사용할 때 제일 많이 사용하는 방법
- 쓰레드에서 수행할 작업을 실행구문 {} 안에 작성하여 익명함수처럼 task라는 이름으로 사용
public class Main {
public static void main(String[] args) {
Runnable task = () -> {
// 쓰레드에서 수행할 작업
int sum = 0;
for (int i = 0; i < 50; i++) {
sum += i;
System.out.println(sum);
}
System.out.println(Thread.currentThread().getName() + " 최종 합 : " + sum);
};
// 위에서 사용한 `run()`대신 사용자가 정의한 task라는 이름으로 Thread 2개 생성
Thread thread1 = new Thread(task);
thread1.setName("thread1");
Thread thread2 = new Thread(task);
thread2.setName("thread2");
// 멀티 Thread 실행
thread1.start();
thread2.start();
}
}
run() : 쓰레드가 수행할 작업을 실행 블록 {} 안에 작성
setName() : 쓰레드에 이름 부여
Thread.currentThread().getName() : 현재 실행 중인 쓰레드의 이름을 반환