2011-12-10 30 views
1

本当に、私はスレッディングが初めてなので、私の質問はかなりダムかもしれません。しかし、私が尋ねたいのは、私はこのクラスを持っています、その名前がMyClass.javaだとしましょう。そして、そのメソッドの中にはcallThread()があります。これは何かを印刷してスリープさせ、コントロールをMyClass.javaのメソッドに戻したいものです。それ、どうやったら出来るの?Java:スレッド内のThread.sleep()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に送信し、1秒後に再び「hi」を印刷します。代わりに、MyThreadは私のプログラム全体をフリーズするので、そこでは全く動作しません。

これには何らかの方法がありますか?

+0

thread.run()は通常のメソッド呼び出しですが、これをTomas氏の回答として置き換える必要があります – stacker

答えて

9

あなたはマニュアルにcallig thread.start()その上

より次のようになります。Defining and Starting a Thread

+0

ありがとうございます!それは今働きます! ;)start()とrun()がまったく別のメソッドであることを知らなかった – matt

+2

答えを受け入れよう –

+0

thread.start()は実際にJava仮想マシンにrun()メソッドを使用すると、メインクラスはあなたの無限ループが完了するのを待つ必要はありません(これは決してありません) –

2

あなたは、Threadクラスのstart()メソッドを呼び出すようにしておく必要があります。

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チュートリアルをご覧ください。

関連する問題