在Java中为每个方法启动一个线程

时间:2012-04-13 03:31:42

标签: java multithreading

我有兴趣在程序中有多个线程,我的要求是在新线程中启动每个方法。

假设我有以下内容:

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

我想要的是,当你调用foo()boo()时,这两种方法必须在不同的线程上运行。因此,我可以使用"val"方法中boo()的更新值。

请善意地给我一些建议来克服这个问题。 在此先感谢.. :))

2 个答案:

答案 0 :(得分:2)

您可以使用以下命令在新线程上运行代码:

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

答案 1 :(得分: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,因为这是处理匿名类(如示例中的两个Runnables)访问本地变量。

此外,您必须将volatile添加到val(否则其他线程可能看不到任何更改):

volatile int val = 0;