【发布时间】:2013-10-27 15:46:17
【问题描述】:
假设我从我的主创建 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!
...
【问题讨论】:
-
你能不能发一些示例代码,这样就很容易说哪个代码在哪个线程下运行了。
-
不清楚你在问什么。
-
@srsyogesh 我发布了一些示例代码
-
因为这里没有同步,所以你猜不到输出。每次运行此程序时,您都可能会看到不同的结果。显然 prettyFunction 不会在主线程下运行,而是在调用该函数的新线程下运行。
标签: java multithreading parallel-processing