Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,每个方法启动一个线程_Java_Multithreading - Fatal编程技术网

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

在Java中,每个方法启动一个线程,java,multithreading,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; } } new Thread(new

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

假设我有以下几点:

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;
  }
}
new Thread(new Runnable(){
        public void run(){
            //do stuff here
        }
    }).start();
我想要的是,当你调用foo和boo时,这两个方法必须在不同的线程上运行。所以我可以使用boo方法中更新的val值

请给我一些克服这个问题的建议。
提前感谢。:

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

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;
  }
}
new Thread(new Runnable(){
        public void run(){
            //do stuff here
        }
    }).start();

下面是最简单的例子:

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

}
您需要做最后的决定,因为这是处理匿名类的方法,比如示例中访问局部变量的两个Runnable

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

volatile int val = 0;

扩展线程,并在运行中实现。如前所述,使用文档了解如何使用线程。因为您希望在不同的线程上从同一个类运行方法。。您可能需要添加一个条件(如线程名称)来执行方法。我可以使用两个运行方法吗。。?因为我想在两个单独的方法中执行foo和boo。谢谢你,但是我需要澄清一个事实,即如何使用run方法来执行两个单独的方法,由两个单独的线程执行。你可以从foo和boo开始一个新的线程。因此,上述代码实际上会在类中出现两次,一次是运行foo代码,另一次是运行boo代码。那么,每个运行方法如何知道谁调用了run,foo或boo..?新的Threadnew Runnable。。。代码将在foo和boo方法中。