Thread와 Runnable
Thread 생성
- Java에서 Thread를 생성하는 방법은 두 가지가 존재
Thread
를 상속 받아서 run()
메서드를 오버라이딩 하는 방법Runnable
인터페이스를 implements 하여 run()
메서드를 정의하는 방법
Runnable implements
Runnable
은 함수형 인터페이스로 run()
만 존재
- 따라서
Thread
를 import 하여 사용해야 함
class ThreadEx1 implements Runnable{
public void run(){
//작업내용
}
}
ThreadEx1 threadEx1 = ThreadEx1();
Thread thread = new Thread(threadEx1);
thread.start();
- implements하여
run()
을 구현하기 때문에 재사용성이 높다!
사실 구현한 run()
으로 Thread
를 생성하는 방법이라 아래 방법과 차이가 없다.
Thread extends
Thread
클래스도 Runable
을 implements 하여 정의한 것
start()
를 하게되면 ThreadGroup
에 추가 시킴
ThreadGroup
은 관련된 스레드를 묶어서 관리할 목적으로 이용
기본적으로 자신을 생성한 스레드와 같은 스레드 그룹에 속하게 됨 -> main 스레드 그룹
- extends하여
start()
로 시작하면 된다.
class ThreadEx2 extends Thread{
public void run(){
//작업내용
}
}
ThreadEx1 threadEx2 = new ThreadEx2();
threadEx2.start();
- 다른 클래스 상속 못받으니
Runnable
implements 방법이 확장성 더 좋다~
언제 run() 메서드를 구현하여 사용할까?
- 멀티 쓰레드를 사용하는 이유?
- 병렬적으로 일을 수행하여 일을 빠르게 처리하기 위하여!
- 그렇다면 언제 사용할까?
- 독립적이고 실행 순서가 상관없는 일에 대해서 사용하자!
- 예) 채팅 시스템과 같이 독립적이고, 순서와 관계 없이 들어오는대로 처리하면 되는 경우
- 조심해야 할 점은?
- 교착상태(Deadlock)에 빠질 수 있으니 독립적으로 수행할때만 사용하자~