2012-04-13 15 views
-1

私はプログラムに複数のスレッドを持つことに興味があり、私の要件は新しいスレッドで各メソッドを起動することです。Javaのメソッドごとに1つのスレッドを開始してください。

私は、次のしていると仮定します。私は私が欲しいもの、この

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

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

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; 
    } 
} 

はuがfoo()boo()を呼び出すときに、これらの2つのメソッドは別のスレッドで実行する必要があります。だから私は boo()メソッドからの更新された値を使用することができます。

この問題を解決するためのアドバイスをしてください。事前に 感謝.. :)

+1

は 'Thread'を拡張し、'ランを() 'で実装します。 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html – hkf

+0

のように、スレッドを使用する方法については、ドキュメントを参照してください。別のスレッドで同じクラスのメソッドを実行したいので、メソッドを実行するために、スレッドの名前のような条件を追加したいかもしれません。 – Geek

+0

2つのrun()メソッドを使用できますか?私は2つの別々のメソッドでfoo()とboo()を実行したいからです。 – user1330635

答えて

2

あなたは以下を使用して、新しいスレッド上でコードを実行することができます。このような

new Thread(new Runnable(){ 
     public void run(){ 
      //do stuff here 
     } 
    }).start(); 
+0

ありがとうlrAndroid、しかし私は2つの別々のスレッドによって実行される2つの別々のメソッドを実行するrun()メソッドを使用する方法を明確にする必要があります – user1330635

+0

foo()とboo()の両方から新しいスレッドを開始します。したがって、上記のコードは実際にはクラス内で2回現れます(一旦fooコードを実行し、再びbooコードを実行すると)。 – lrAndroid

+0

どのようにrun()メソッドがfoo()かboo()のどちらを呼び出したのかを知るには? – user1330635

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); 

} 

ますAfinalにする必要があります。これは、ローカル変数にアクセスする匿名クラス(この例では2つのRunnablesのようなもの)を扱うためです。

はまた、あなたが(それ以外の場合は、他のスレッドは、それへの変更が表示されない場合があります)valvolatileを追加する必要があります。

volatile int val = 0; 
関連する問題