[Java][Thread] 쓰레드의 구현과 실행
2022. 6. 28. 18:22ㆍJAVA/Language
1. 쓰레드를 구현하는 방법
- Thread 클래스를 상속하는 방법
- Runnable 인터페이스를 구현하는 방법
1.1 Thread 클래스를 상속하는 방법
class MyThread extends Thread{
public void run(){ // Thread 클래스의 run()을 오버라이딩
...
}
}
MyThread t1 = new MyThread();
t1.start();
1.2 Runnable 인터페이스를 구현하는 방법
class MyThread implements Runnable{
public void run(){ // Runnable 인터페이스의 run()을 구현
...
}
}
Thread t1 = new Thread(new MyThread());
t1.start();
2. 현재 실행중인 쓰레드의 참조
static Thread currentThread() : 현재 실행중인 쓰레드의 참조를 반환함
String getName() : 쓰레드의 이름을 반환함
다음 예제는 currentThread(), getName()을 호출하여 현재 실행중인 쓰레드의 이름을 출력하는 예제입니다.
public class MyThread1 extends Thread{
@Override
public void run() {
IntStream.range(0, 5).forEach(i->{
System.out.println(getName()); // 조상인 Thread의 getName() 호출
});
}
}
public class MyThread2 implements Runnable{
@Override
public void run() {
IntStream.range(0, 5).forEach(i->{
// Thread.currentThread() - 현재 실행중인 Thread 반환
System.out.println(Thread.currentThread().getName());
});
}
}
public class Driver {
public static void main(String[] args) {
MyThread1 t1 = new MyThread1();
Runnable r = new MyThread2();
Thread t2 = new Thread(r);
t1.start();
t2.start();
}
}
실행결과
Thread-0
Thread-0
Thread-0
Thread-0
Thread-0
Thread-1
Thread-1
Thread-1
Thread-1
Thread-1
3. 쓰레드의 실행 - start()
쓰레드 인스턴스를 생성하였다면 start() 메서드를 호출하여 실행시킬 수 있습니다.
t1.start(); // 쓰레드 t1을 실행
t2.start(); // 쓰레드 t2을 실행
- 쓰레드의 start()가 호출되었다고 해서 바로 실행되지 않습니다. 대기 상태에 있다가 자신의 차례가 되어서 실행됩니다.
- 한번 실행이 종료된 쓰레드는 다시 실행할 수 없습니다. 즉, 하나의 쓰레드에 대해 start()가 한번만 호출할 수 있습니다.
- 쓰레드의 작업을 더 수행해야 한다면 쓰레드의 인스턴스를 새로 생성한 다음에 start()를 호출해야 합니다.
References
source code : https://github.com/yonghwankim-dev/java_study/tree/main/ch13
[도서] Java의 정석, 남궁 성 지음
'JAVA > Language' 카테고리의 다른 글
[Java][Thread] 싱글쓰레드와 멀티쓰레드 (0) | 2022.06.30 |
---|---|
[Java][Thread] 쓰레드 클래스의 start()와 run() 메서드 (0) | 2022.06.30 |
[Java][Thread] 프로세스와 쓰레드 (0) | 2022.06.28 |
[Java][I/O] 직렬화(Serialization) (0) | 2022.06.28 |
[Java][I/O] 표준입출력과 File (0) | 2022.06.28 |