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

我想要的是,当你调用foo()and时boo(),这两种方法必须在不同的线程上运行。"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);

}

您需要 makeA final因为这是处理Runnables访问局部变量的匿名类(如示例中的两个)。

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

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