-
[Java] 쓰레드(Thread) - 쓰레드의 구현과 실행Java 2022. 6. 14. 17:09
[쓰레드의 구현]
쓰레드를 구현하는 방법은 2가지로 나눌 수 있다.
1.Thread 클래스를 상속받는 방법
2. Runnable 인터페이스를 구현하는 방법
상속은 단일 상속만 가능하기 때문에 인터페이스를 구현하는 것이 일반적이다.
또한 재사용성이 높고 코드의 일관성을 유지할 수 있기 때문에
1번에 비해 2번이 보다 객체 지향적인 방법이라 할 수 있다.
Runnable 인터페이스는 run()만 정의 되어 있는 간단한 인터페이스로
이를 구현하기 위해서는 해당 메서드의 구현부를 작성해주기만 하면 된다.
// 1. Runnable 인터페이스를 구현한 클래스 인스턴스 생성 Runnable r = new ThreadImpl(); // 2. 이 인스턴스를 Thread클래스의 생성자 매개변수로 제공 Thread t = new Thread(r); // 1과 2를 한줄로 바꾸면 아래와 같다. Thread t = new Thread(new ThreadImpl());
[쓰레드의 실행]
쓰레드를 생성한 다음 실행을 하기위해서는 start() 메서드를 호출해야한다.
Thread t = new Thread(new ThreadImpl()); t.start(); // 쓰레드 t를 실행시킨다.
쓰레드의 start() 메서드가 호출되었을 때 바로 실행되는 것이 아닌
실행 대기 상태에서 차례가 되면 실행이 된다.
또한 한번 실행이 종료된 쓰레드는 다시 실행 불가능하다.
즉 하나의 쓰레드에는 한번의 start()만 호출 될 수 있다.
(두번 이상 호출 시 IllegalThreadStateException이 발생한다.)
start() 메서드가 호출 되면 새로운 호출 스택(Call Stack) 이 생성되며
해당 스택에서 미리 구현한 run() 가 호출되어 실행되게 된다.
이에 따라 쓰레드는 현재 진행중인 메서드의 동작과는 별개로
실행되고 종료되게 된다.
[참고 : Java의 정석]
'Java' 카테고리의 다른 글
[Java] 람다 - 람다식의 타입과 형변환, java.util.function 패키지 (0) 2022.06.15 [Java] 람다 - 람다식이란?, 람다식 작성방법 (0) 2022.06.15 [Java] 쓰레드(Thread) - 쓰레드의 실행제어2(동기화) (0) 2022.06.14 [Java] 쓰레드(Thread) - 쓰레드의 실행제어1(스케줄링) (0) 2022.06.14 [Java] 쓰레드(Thread) - 데몬 쓰레드 (daemon thread) (0) 2022.06.14