-1

プログラムに複数のスレッドがあることに興味があります。私の要件は、新しいスレッドで各メソッドを開始することです。

次のものがあるとします。

public class A
{
  int val=0;

  public void foo() 
  {
    for(int j=0;j<10;j++)
    { 
      val=j;
      Thread.Sleep(1000);
    }
  }

  public int boo()
  {  
    return val;
  }
}

このクラスのオブジェクトをこのような別のクラスで作成したい

public class B
{
  A myA = new A();
  myA.foo();
  int ret=myA.boo();
}

私が欲しいのは、 u と を呼び出すfoo()boo()、これらの 2 つのメソッドは別々のスレッドで実行する必要があるということです。したがって、メソッド"val"からの更新された値を使用できます。boo()

この問題を克服するためのアドバイスをお願いします。前もって感謝します..:)

4

2 に答える 2

2

次を使用して、新しいスレッドでコードを実行できます。

new Thread(new Runnable(){
        public void run(){
            //do stuff here
        }
    }).start();
于 2012-04-13T03:41:51.627 に答える
0

このようなもの (最も単純な例):

public static void main(String[] args) {

    final A myA = new A();

    new Thread(new Runnable() {
        public void run() {
            myA.foo();
        }).start();

    new Thread(new Runnable() {
        public void run() {
            int ret=myA.boo();
        }).start();

    Thread.sleep(9999);

}

これは、ローカル変数にアクセスするA final匿名クラス (例の 2 つなど) との取引であるため、作成する必要があります。Runnables

また、追加volatileする必要がありますval(そうしないと、他のスレッドが変更を認識しない場合があります):

volatile int val = 0;
于 2012-04-13T04:51:45.930 に答える