Img profile default
moontree
  • 2016.10.17 13:20
  • 조회수 16
  • 답변수 1
Img profile default
moontree
  • 2016.10.17 13:20
  • 조회수 16
  • 답변수 1

상속 없이 쓰레드 객체 생성이 되나요?

우선 자바 강의 너무 감사하게 잘 보고 있습니다.
혼자 책을 보며 익하는 것보다 이해가 더 잘 되서 너무 너무 감사합니다. __^

질문입니다.
public class LambdaExam1 {
public static void main(String[] args) {
new Thread(new Runnable(){public void run(){

강사님의 람다 예제에서 extends 나 implement 없이 쓰레드 객체를 선언했는데... 오류가 없어서 신기합니다.
내가 객체를 잘 이해 못하는건가 밤새 생각했는데 모르겠습니다.

선생님의 예제가 혹사나 패키지 안에 다른 클래스에 쓰레드가 있어서 가능했나? 궁굼해서 테스트로 클래스 한개만 따로 만들어서 쓰레드를 객체를 만들었는데. 오류 메시지도 안떴습니다.

이유를 알고 싶습니다.

  • #자바 중급
  • #람다식

1 답변

  • 1679990965556705
    김민식
    • 2016.11.17 13:37

    우선 Thread는 Thread 클래스의 인스턴스를 만들거나, Runnable 인터페이스를 구현한 클래스의 인스턴스를 만들거나 Thread 객체를 생성할 때 생성자에 Runnable을 구현한 객체를 전달하죠?

    Thread 자체는 클래스이고, Runnable은 인터페이스이므로
    이들 또한 객체를 생성하고 쓰레드가 될 수 있습니다.

    (extends나 implements의 역활은 상속받거나 구현한 클래스들이 쓰레드의 역활을 하도록 하는 것이죠?)

    그러므로
    new Thread(new Runnable(){public void run()}); 이 가능하네요
    new Runnable(){public void run()}은 인터페이스를 객체화시킨 익명클래스이구요
    new Thread는 아시다시피 Thread 객체를 만드는 겁니다.

    혼동하실 부분은 객체를 참조변수에 참조 시키지 않았기 때문입니다.

    Runnable run = new Runnable(){public void run()};
    Thread thread1 = new Thread(run);
    으로 작성할 수 있습니다.

답변 쓰기

이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.