假设我从我的 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/