2012-04-13 198 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; 
相关问题