-1

私の問題:

Thread からメソッドを実行したいのですが、これは Thread ではありませんが、実行に時間がかかる場合があります (サーバーの応答を待つなど)。私の非スレッド メソッドが別のクラスにあることが重要です (クラスは、他のクラスでも使用されるオブジェクトです)。

サンプルコードのようにこれを行うと、プログラム全体が 10 秒間一時停止しますが、他のプログラムコードで続行したいと考えています。

これを行う良い方法はありますか?

私のコード:

MyThread.java ( extends Thread)

public Foo foo;

public void run() {
    foo.bar();
}

Foo.java

public void bar() {
    try {
        Thread.sleep(10000);
        // Represents other code that takes some time to execute
        // (e.g. waiting for server response)
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
}

そして主な方法:

public static void main(String[] args) {
    MyThread t = new MyThread();
    t.foo = new Foo();
    System.out.println("Starting!");
    t.run();
    System.out.println("Done!");
}
4

5 に答える 5

4

run()Threadを呼び出したくない場合は、 を呼び出しますstart()

于 2013-09-27T14:53:21.177 に答える
2

MyThreadextendsと仮定すると、 notThreadを呼び出す必要があります。start()run()

呼び出しrun()は、メソッドを同期的に呼び出すだけです。

public static void main(String[] args) {
    MyThread t = new MyThread();
    t.foo = new Foo();
    System.out.println("Starting!");
    t.start(); // change here
    System.out.println("Done!");
}

start()コードを実行する OS スレッドを実際に開始します。

于 2013-09-27T14:53:06.310 に答える
0

run() メソッドを直接呼び出さないでください。

run() メソッドの代わりに start() メソッドを呼び出します。

run() メソッドを直接呼び出す場合

このスレッドはメイン スタックに移動し、1 つずつ実行されます。

于 2013-09-27T14:57:30.663 に答える
0
  class MyThread extends Thread{

         public Foo foo;

         public void run() {
            foo.bar();
         }
 }

class Foo{

     public void bar() {
      try {
         boolean responseCompleted = false;
         boolean oneTimeExcution = false;
         while(!responseCompleted){
              if(!oneTimeExcution){
                       // Represents other code that takes some time to execute
                   oneTimeExcution = true;
              }
              if( your server response completed){
                      responseCompleted  = true;
              }
         }
     } catch (InterruptedException e) {
          e.printStackTrace();
     }
}


public static void main(String[] args) {
     MyThread t = new MyThread();
      System.out.println("Starting!");
     t.start();        
     System.out.println("Done!");
}
于 2013-09-27T15:03:15.697 に答える
0

スレッドでは run() ではなく start() を使用してください。そうしないと、メインスレッドが別のスレッドのメソッドを呼び出すのと同じようになります。つまり、メインスレッド自体で wait() を呼び出すことになります。

于 2013-09-27T14:56:24.957 に答える