0

さて、今私は本質的にこのコードを持っています:

class a {

public void ab() {
    b thread = new b();
     thread.bb(this);
    }
}

class b {

    public void bb(a _a) {
     //execute code here in new thread so ab can continue running
    }
}

しかし、これは新しいスレッドでそれを開きません、そしてはい私はこれを研究しました、私が見つけたすべての解決策はパラメータ(これ)をbbメソッドに送るオプションを残しませんでした

パラメータを必要とする新しいスレッドでclass.methodを呼び出す方法は?

4

2 に答える 2

2

問題は、「パラメータを必要とする新しいスレッドでclass.methodを呼び出す方法」です。

答えは「できません」です...しかし、これは回避策です。コンストラクターを持つインスタンスを使用して、実行の「コンテキスト」を定義します。

class MyThread extends Thread {
   MyThread( A a ){
      this.a = a;
   }
   @Override public void run() {
      ... use this.a; // a was the "parameter"
   }
   private A a;
}

MyThread myThread = new MyThread( aValue );
myThread.start();
于 2012-10-22T21:06:32.630 に答える
1

スレッドを開始するには、のインスタンスが必要ですが、そうjava.lang.Threadbはありません。これを実現するためにスレッドを拡張できます。

class b extends Thread {

スレッドは、メソッドに配置したものはすべて非同期で実行run()され、元の(空の)実装からオーバーライドできます。

class b extends Thread {

    @Override
    public void run() {
    }
}

ただし、これではのインスタンスを渡すことはできませんa。ここでの最善のオプションはa、のコンストラクターでインスタンス変数としてのインスタンスを取ることですb

class b extends Thread {

    private final a _a;

    public b(a _a) {
        this._a = _a;
    }

    @Override
    public void run() {
        //now you can use _a here
    }
}

最後に、スレッドを非同期で実行するには、新しく実装されたrun()メソッドを呼び出さずThread#start()に、を呼び出します。これrun()により、新しいスレッドでメソッドが呼び出されます。

class a {

    public void ab() {
        b thread = new b(this);
        thread.start();
    }
}

ちなみに、標準のJava規則では、クラス名は大文字で始めるため、名前をに変更する必要がaありますA。ただし、コンパイルまたは実行に関しては、これによる違いはありません。

于 2012-10-22T21:06:51.570 に答える