2012-04-13 196 views
-1

我有興趣在程序中有多個線程,我的要求是在一個新線程中啓動每個方法。在Java中每個方法啓動一個線程

假設我有以下幾點:

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() ,這兩種方法必須在不同的線程上運行。所以我可以使用boo()方法的更新值"val"

請提供一些建議來解決這個問題。 在此先感謝.. :)

+1

延長'Thread',並在'運行實現()'。 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html – hkf 2012-04-13 03:39:37

+0

就像上面提到的那樣,使用文檔來看看如何使用線程。既然你想在不同的線程上運行同一個類的方法,你可能需要添加一個條件,比如線程的名字來執行方法。 – Geek 2012-04-13 03:42:21

+0

我可以使用兩個run()方法..?因爲我想在兩個獨立的方法中執行foo()和boo()。 – user1330635 2012-04-13 03:42:52

回答

2

您可以使用下面的一個新的線程運行代碼:

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

感謝lrAndroid,但我需要澄清如何使用run()方法執行兩個獨立線程執行兩個獨立方法的事實 – user1330635 2012-04-13 03:48:01

+0

您從foo()和boo()開始一個新線程。因此,上面的代碼實際上會在你的類中出現兩次(一次運行foo代碼,再次使用boo代碼)。 – lrAndroid 2012-04-13 03:50:10

+0

那麼每個run()方法如何知道誰調用了run(),無論是foo()還是boo()..? – user1330635 2012-04-13 03:55:02

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,因爲這是與匿名類(如示例中的兩個Runnables)訪問本地變量的交易。

此外,您還必須添加volatileval(否則其他線程可能看不到它的任何變化):

volatile int val = 0; 
相關問題