Почему у моего `Runnable` нет метода` start`? - PullRequest
0 голосов
/ 30 января 2012

Почему я должен расширять Thread во внутреннем классе вместо реализации Runnable Следующий код работает: -

class Outer{

 Inner innerObj;

 Outer(){
  innerObj = new Inner();
 }

 public void begin(){

  innerObj.start();
 }

 class Inner extends Thread{

  Inner(){
   System.out.println("Thread initialized!");
  }

  public void run(){

    System.out.println("Thread running!");

  }  
 }
}

class Driver{

 public static void main(String[] args){

  Outer o1 = new Outer();
  o1.begin();

 }

}

Однако использование Runnable вызывает ошибку компиляции: -

class Outer{

 Inner innerObj;

 Outer(){
  innerObj = new Inner();
 }

 public void begin(){

  innerObj.start();
 }

 class Inner implements Runnable{

  Inner(){
   System.out.println("Thread initialized!");
  }

  public void run(){

    System.out.println("Thread running!");

  }  
 }
}

class Driver{

 public static void main(String[] args){

  Outer o1 = new Outer();
  o1.begin();

 }

}

Ответы [ 2 ]

6 голосов
/ 30 января 2012

Это потому, что реализация Runnable не дает классу метод start.Вам нужно будет создать Thread для запуска Inner.

Inner i = new Inner();
Thread t = new Thread( i );
1 голос
/ 30 января 2012

Runnable не предоставляет метод start (). Вам действительно нужно создать поток для запуска внутреннего класса

...