반응형
Java에서 Thread를 생성하는 방법엔 Thread 클래스 상속/Runnable 인터페이스 구현 두가지 방법이 있다.
public class HelloThread extends Thread{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": run 실행");
}
}
public class HelloThreadMain {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName() + ": main() start");
HelloThread helloThread = new HelloThread();
helloThread.start();
System.out.println(Thread.currentThread().getName() + ": main() end");
}
}
// 1. 실행시 main Thread가 main()을 실행을 하고
// 2. main Thread가 helloThread.start() 요청을 하면
// 3. helloThread thread가 run()을 하게 된다.
// 위 코드에서 Thread는 2개이다.
* helloThread.start()를 하게되면 helloThread에게 지시를 하는것이지만 helloThread.run()을 직접적으로 해버리면
helloThread가 실행하는게 아닌 main이 실행하는게 되어버린다.
데몬스레드
스레드는 사용자스레드와 데몬스레드 2가지 종류로 구분
사용자 스레드가 종료되면 데몬스레드가 종료안되었더라도 종료가 된다.
public class HelloRunnable implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": run() start");
}
}
public class HelloRunnableMain {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName() + ": main() start");
HelloRunnable helloRunnable = new HelloRunnable();
Thread thread = new Thread(helloRunnable);
thread.start();
System.out.println(Thread.currentThread().getName() + ": main() end");
}
}
extends Thread와 같은 실행결과가 나온다.
다른점은 HelloRunnableMain에서 new Thread(helloRunnable)과 같이 인스턴스를 넘겨줘야한다.
스레드 사용시엔 인터페이스 구현하는 방식으로 사용하는건 권장한다.
왜냐면
extends의 경우는 단일 상속만 허용하기때문
인터페이스가 유연하게 사용하기 좋다
반응형
'공부 > Java' 카테고리의 다른 글
메모리 가시성 (0) | 2024.09.20 |
---|---|
스레드 기본 정보 (1) | 2024.09.18 |
프로세스와 스레드란 (0) | 2024.09.16 |
래퍼, Class 클래스란 (0) | 2024.05.30 |
String이란 (0) | 2024.05.29 |