假设我是从我的主公司创建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()
,则需要考虑同步。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句