java - 如果我在 java 中调用我的主类的一个函数,从其他有自己线程的对象,这个函数会在单独的线程中运行吗?

标签 java multithreading parallel-processing

假设我从我的 main 创建 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!
  ...

最佳答案

线程不关心它们在哪个对象中运行。除非它们与另一个线程连接(即它们被停止)或者如果它们遇到生成新线程的代码,一切都会留在线程中。

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

关于java - 如果我在 java 中调用我的主类的一个函数,从其他有自己线程的对象,这个函数会在单独的线程中运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19619969/

相关文章:

java - 确定物体朝向或远离给定的经纬度点

java - Websocket 在 playframework 2 中向所有客户端发送数据

java - JSP Servlet多线程问题

c - OpenMP 并在 DFS 树的特定级别打开并行化

c# - 任务层次结构示例未按预期工作

java - 如何释放多个 org.hibernate.impl.SessionFactoryImpl

c# - 从线程调用有效但不能更简单?

Java资源池线程问题

c - MPI_Reduce 数组表示十进制值 (C)

java - 如何使用@JoinColumn 和@MapsId 在@OneToOne 关系中设置外键名称