쓰레드 클래스 질문이요
378
작성한 질문수 8
앞에 Thread강의에서는 객체생성하고 start() 함수만 써서 실행했는데
이번 강의는 cleanRunnable.start() 안쓰고
Thread 객체를 추가로 사용하셨는데 이 쓰레드 객체가 왜 쓰였는지 궁금합니다
답변 2
1
안녕하세요?
먼저 쓰레드를 구현하기 위해서는 Thread 클래스를 직접 상속하거나 Runnable 인터페이스를 구현하는 방법을 사용할 수 있습니다.
1) Thread 클래스를 직접 상속
public class CleanThread extends Thread {
public void run() { ... }
}CleanThread cleanThread = new CleanThread();
cleanThread.start();2) Runnable 인터페이스를 구현
public class CleanRunnable implements Runnable {
public void run() { ... }
}CleanRunnable cleanRunnable = new CleanRunnable();
Thread thread = new Thread(cleanRunnable);
thread.start();다른 클래스를 이미 상속하는 경우라면 Thread 클래스도 상속할 수는 없기 때문에 보통 Runnable 인터페이스를 구현하는 식으로 활용하는데요.
Runnable 인터페이스에는 start() 메소드가 없고 run() 메소드만 있습니다. run() 메소드를 그대로 호출하게 되면 이는 별도의 쓰레드를 생성하여 동시에 실행되는 것이 아니라 그냥 일반적인 메소드가 호출되는 것과 같아요. 그래서 Runnable 인터페이스를 구현한 클래스(예제에서는 CleanRunnable)로부터 객체(예제에서는 cleanRunnable)를 만들게 되면, 새로운 Thread 객체(예제에서는 thread)를 만들면서 생성자의 전달값으로 이를 전달해줘야 합니다. 그래야 start() 메소드를 호출할 수 있게 되고 결과적으로 새로 만들어진 쓰레드에서 run() 메소드에 정의된 동작이 실행될 수 있답니다 😊
감사합니다.
0
아 설명 감사합니다! 제가 착각하고있었네요 Thread클래스랑 Runnable인터페이스랑 사용자가 만든 01Thread 02Runnable 클래스랑 이름이 비슷하다보니 머릿속에서 살짝 꼬였었는데 단번에 이해했습니다
자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?
1
145
2
static이 뭐였는지 기억이 안나요 ㅜㅜ
0
118
2
Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의
0
70
1
사고력 키우는 법이 어떤게 있나요?
0
93
2
getter setter
0
101
2
섹션9. 66 메소드 오버로딩 시 질문이 있습니다.
0
79
1
안녕하세요 갑자기 프로그램 에러가 떠서 안되네요
0
75
2
변수 이름짓는법
0
114
2
intelli J 실행오류
0
114
2
혹시 이건 수학적 사고가 부족한 걸까요?
0
152
2
영상이 재생이 안됩니다.
0
167
3
이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.
0
116
2
응용이 어렵습니다.
0
206
2
IntelliJ가 보이지 않습니다.
0
185
3
JDK 버전 문의
0
128
2
BlackBox 파일 내에서 메소드 정의
0
136
1
동기화
0
120
2
Iterator 문의
0
104
1
코드 순서 문의
0
141
1
클래스 메소드
0
149
2
Quiz_05 관련 질문드립니다 !
0
118
2
다운로드가 안됩니다
0
165
2
다형성
0
120
2
HashMap
0
80
2






Runnable 강좌에서 쓰레드 객체를 만들려는데 자꾸 lang이 붙어서 객체 생성이 안돼요 ㅠㅠ