如果我在Java中从具有自己线程的其他对象中调用主类的函数,则该函数是否将在单独的线程中运行?

Xyzk

假设我是从我的主公司创建Producer。然后,此生产者创建它自己的线程,并在其产生某些东西时调用函数main.addProduct()此函数是否将在与调用它的生产者相同的线程中执行?还是它将在与main相同的线程中工作,这意味着它将等到所有其他任务完成后再解决它?

为了显示

public class MainP{
  public static void main(String[] args) {
        Producer p1 = new producer;
        Producer p2 = new producer;
        Producer p3 = new producer;
        p1.start();
        p2.start();
        p3.start();
        System.out.println("I'm ugly");
  }

  public static void prettyFunction(){
        System.out.println("I'm pretty!");
  }

}

public class Producer  extends Thread{
  public void run(){
        while(true)
              MainP.prettyFunction();
}

问题是结果是否会

  I'm ugly
  I'm pretty!
  I'm pretty!
  I'm pretty!
  ...

或者

  I'm pretty!
  I'm pretty!
  I'm pretty!
  I'm ugly
  I'm pretty!
  I'm pretty!
  I'm pretty!
  ...
马丁·波德维斯(Maarten Bodewes)

线程不在乎它们在哪个对象中运行。除非它们与另一个线程联接(即它们已停止),或者它们遇到生成新线程的代码,否则所有内容都将保留在该线程中。

显然,如果您从多个线程中调用一个方法,尤其是具有副作用的方法,例如main.addProduct(),则需要考虑同步。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章