2011-12-10 176 views
1

好的,我是線程新手,所以我的問題可能很愚蠢。但是我想問的是,我有這個類,讓我們說它的名字是MyClass.java。然後在它的一個方法裏面是callThread(),我想打印出某些東西,睡覺並返回控制到MyClass.java的方法。我怎麼做?Java:thread.sleep()while while循環不起作用

目前,我的代碼是這樣的:

class MyClass { 
    void method() 
    { 
     MyThread thread = new MyThread(); 
     thread.run(); 
     // do some other stuff here... 
    } 
} 

然後,這將是MyThread的:

class MyThread implements Runnable { 
    public void run() 
    { 
     while (true) 
     { 
      System.out.println("hi"); 
      this.sleep(1000); 
     } 
    } 
} 

我希望MyThread的將打印 「喜」,回傳控制到MyClass,然後在一秒鐘後再打印「hi」。相反,MyThread凍結了我的整個程序,因此讓它在那裏根本不起作用...

有沒有辦法解決這個問題?

+0

thread.run()是一個普通的方法調用,您需要將其替換爲Tomas – stacker

回答

9

你應該callig thread.start()

更多關於該手冊中:Defining and Starting a Thread

+0

回答謝謝!它現在有效! ;)從來不知道start()和run()是完全不同的方法 – matt

+2

接受答案請 –

+0

是的,thread.run只會導致它調用該方法,但thread.start()實際上告訴Java虛擬機運行run()方法,這樣你的主類就不用等待你的無限循環完成了(它永遠不會) –

2

您必須調用start()方法Thread類的方法。

MyThread thread = new MyThread(); 
Thread th=new Thread(thread); 
th.start(); 

睡眠()是Thread類的一個實例方法和類MyThread的是不是一個線程(這是一個可運行的),所以你需要使用Thread.currentThread().sleep()方法。

while (true) 
{ 
    System.out.println("hi"); 
    try{ 
     Thread.currentThread().sleep(1000); 
    }catch(Exception ex){ } 
    } 

閱讀this教程更多關於線程的信息。