2024. 4. 22. 23:32ㆍJava
멀티스레드는 하나의 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 기법이다.
스레드는 프로세스 내에서 실제로 작업을 수행하는 최소 단위로, 프로세스의 리소스를 공유한다.
각 스레드는 독립적인 실행 흐름을 가지며, 자신만의 스택을 가지지만, 힙 메 모리와 코드 영역은 공유한다.
스레드 생성 방법 2가지
1. extents Thread (스레드를 상속받기)
- Thread 클래스를 상속받는 것은 가장 직관적인 방법이다.
- 사용자는 Thread 클래스를 확장하고 run() 메서드를 오버라이드하여 스레드가 실행할 코드를 정의한다.
class MyThread extends Thread {
public void run() {
System.out.println("스레드가 실행 중입니다.");
}
}
public class TestThread {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start(); // 스레드 실행
}
}
2. implements Runnable (Runnable을 구현하기)
- Runnable 인터페이스를 구현하는 방법은 스레드 실행 코드를 Thread 객체에서 분리할 수 있게 해준다.
- 이는 클래스가 다른 클래스를 상속받고 있어 Thread 클래스를 상속받 을 수 없는 경우 유용하다
class MyRunnable implements Runnable {
public void run() {
System.out.println("Runnable 스레드 실행 중");
}
}
public class TestRunnable {
public static void main(String[] args) {
Thread t = new Thread(new MyRunnable());
t.start(); // 스레드 실행
}
}
.
start(): 스레드를 시작하고, 스레드가 run() 메서드를 실행하도록 한다.
run(): 스레드가 할 작업을 정의하는 곳이다. 직접 호출하기보다는 start() 메서 드를 통해 간접적으로 호출되어야 한다.
join(): 한 스레드가 다른 스레드의 종료를 기다리게 한다
Thread t = new Thread(new MyRunnable());
t.start();
t.join(); // t 스레드가 종료될 때까지 현재 스레드를 대기시킵니다.
. 예를 들어, 메인 스레드 가 작업 스레드의 처리를 기다리고 싶을 때 사용한다.
.
wait(): 객체의 모니터 락을 통해 스레드를 대기 상태로 전환한다. 다른 스레드가 notify() 또는 notifyAll() 을 호출할 때까지 대기한다.
notify()/notifyAll(): wait() 에 의해 대기 상태로 전환된 스레드 중 하나( notify() ) 또는 모든 스레드( notifyAll() )를 깨우는 데 사용된다.
'Java' 카테고리의 다른 글
Java IO(입출력) (0) | 2024.04.22 |
---|---|
내부 클래스 (0) | 2024.04.16 |
예외처리(Exception) (1) | 2024.04.16 |
인터페이스(Interface) (0) | 2024.04.16 |
추상 클래스 (0) | 2024.04.16 |