Runnable 인터페이스
Runnable은 자바의 함수형 인터페이스로, 오직 하나의 메소드인 run() 메소드를 가지고 있다. 이 메소드 안에 스레드가 수행할 작업을 정의할 수 있다.
Runnable 인터페이스를 구현하는 클래스를 만들거나, 익명 클래스, 람다 표현식을 사용해 run() 메소드를 구현할 수 있다.
// Runnable 인터페이스를 구현하는 클래스
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Runnable running");
}
}
// 실행
Thread thread = new Thread(new MyRunnable());
thread.start();
Runnalbe을 사용하면 여러 스레드에서 동일한 작업을 수행하도록 만들 수 있고, 스레드 풀과 같은 고급 기능을 쉽게 사용할 수 있다.
Runnable은 다른 클래스를 상속받을 수 있는 유연성을 제공한다.( 자바는 다중상속을 지원하지 않기 때문에 클래스가 이미 다른 클래스를 상속받고 있는 경우 Thread 클래스를 상속받을 수 없기 때문)
Thread 클래스
Thread는 자바의 클래스이며, 자체적으로 스레드를 생성하고 실행하는 기능을 가지고 있다.
Thread클래스는 Runnable 인터페이스를 구현하고 있으며, 이를 상속받아 run()메소드를 오버라이드 할 수 있다.
// Thread 클래스를 상속받아 run() 메소드 오버라이드
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread running");
}
}
Thread 클래스를 상속받으면 스레드와 직접적으로 연관된 메소드 (start(), sleep(), join() 등)를 쉽게 사용할 수 있다.
그러나 Runnable 인터페이스를 구현하는것과 다르게 클래스 상속의 유연성이 제한되기 때문에, 이미 다른 클래스를 상속받고 있는 경우에는 Thread를 상속받을 수 없다.
주요 차이점과 주요 사용처
주요 차이점
- 유연성 : Runnable 인터페이스는 다른 클래스를 상속받을 수 있는 유연성을 제공하지만 Thread 클래스를 상속받으면 다중 상속이 불가능하기 때문에 유연성이 제한됨
- 구현 방식 : Runnable은 단순히 작업을 정의하는 데 사용되며, 실제로 스레드를 생성하고 시작하는 것은 Thread객체가 담당한다. 반면 Thread클래스는 스레드를 생성하고 실행하는 데 사용된다.
- 스레드 관리 : Thread를 상속받으면 스레드 관리를 포함한 추가적인 기능을 제공하지만, 대부분의 경우 Runnalbe을 구현하고 이를 Thread에 전달하는 방식이 더 선호된다. 왜냐하면 코드의 재사용성과 유연성을 높이기 때문이다.
주요 사용처
- Runnable 사용
- 이미 다른 클래스를 상속받고 있거나, 스레드 실행 로직과 스레드 관리 기능을 분리하고 싶을 때
- 스레드 풀과 함께 사용할 때
- Thread 사용
- 단순히 간단한 스레드를 만드러 실행할 때
- 스레드 관리 기능이 필요할 때, 하지만 이 경우 대부분에 상황에서 Runnable을 사용하고 이를 Thread에 전달하는 방식으로 사용한다.
'java' 카테고리의 다른 글
snmp4j 컨닝페이퍼 (0) | 2024.09.10 |
---|---|
함수형 인터페이스와 람다 (1) | 2024.09.05 |
TimeOut을 사용하는 대표적인 상황 몇가지 (0) | 2024.08.27 |
JAVA Stream API 정리 (0) | 2024.08.22 |
서블릿의 메소드와 핸들러,JUnit 개념 정리 (0) | 2024.07.26 |