2014-10-12 4 views
0

У меня есть одноэлементный класс, который также является Runnable (и наблюдаемым). Когда я пытаюсь запустить поток из main, он не создает новый поток и не застревает в основном цикле.singleton и thread не работают вместе

public class A extends Observable implements Runnable 
{ 
    private static A instance = null; 

    private A() {  
    } 

    public static A getInstance() { 
     if(instance == null) { 
      instance = new A(); 
     } 
     return instance; 
    } 


    @Override 
    public void run() 
    { 

     while (true) { 

      System.out.print("\nSleeping"); 
      // sleep   
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       System.out.print("\n[Error]"); 
      }      
     } 
    } 

} 

и главный класс:

Thread thread = new Thread(A.getInstance()); 
thread.run(); 
System.out.print("\nAfter..."); 

Я не могу видеть "После" журнала, только "Спящий" в цикле. Зачем?

ответ

1

Вы вызываете run() вместо start().

+1

И ... (было бы неплохо, чтобы вы объяснили разницу.) –

+2

Разница заключается в том, что 'start()' - это метод, который библиотека предоставляет вам для вызова, когда вы хотите начать новый поток. 'run()' - это метод, который _you_ предоставляет библиотеке для вызова _in_ нового потока. –

Смежные вопросы