멀티 스레드(Thread)

2024. 4. 22. 23:32Java

멀티스레드는 하나의 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 기법이다.

스레드는 프로세스 내에서 실제로 작업을 수행하는 최소 단위로, 프로세스의 리소스를 공유한다.

각 스레드는 독립적인 실행 흐름을 가지며, 자신만의 스택을 가지지만, 힙 메 모리와 코드 영역은 공유한다.

 

스레드 생성 방법 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