gpt4 book ai didi

java - 这个程序发生了什么,更重要的是,为什么?

转载 作者:行者123 更新时间:2023-12-01 16:40:46 27 4
gpt4 key购买 nike

请帮助我理解该程序的执行以及从更广泛的意义上讲,这里应用了哪些概念?解释线程/堆栈创建和销毁的插图会很有帮助。

class Joining {

static Thread createThread(final int i, final Thread t1) {
Thread t2 = new Thread() {
public void run() {
System.out.println(i+1);
try {
t1.join();
} catch (InterruptedException ie) {
}
System.out.println(i+2);
}
};
System.out.println(i+3);
t2.start(); //1
System.out.println(i+4);
return t2;
}
public static void main(String[] args) {
createThread(10, createThread(20, Thread.currentThread()));
}
}

最佳答案

  1. 内部 createThread 调用在主线程 [M] 的底部调用,参数为 20 和当前线程。
  2. 此调用打印 23。
  3. 启动一个新线程 [A](并将返回),打印 21,并等待主线程 [M] 结束(并在结束后打印 22)。
  4. 此调用打印 24。在新线程 [A] 打印 21 之前不可能知道这是否会发生。
  5. 此调用返回新线程 [A],该线程正在等待主线程 [M] 终止。
  6. 新线程 [A] 作为第二个参数传递给 createThread 调用,第一个参数为 10。
  7. 此调用会打印 13。
  8. 另一个新线程 [B] 启动(并且将返回,尽管没有人捕获此返回),它打印 11,并等待第一个创建的线程 [A] 终止(并在终止后打印 12)。
  9. 此调用打印 14。在第二个新线程 [B] 打印 11 之前不可能知道这是否会发生。
  10. 此调用返回第二个新线程 [B],它正在等待第一个创建的线程 [A] 终止,但此返回调用没有执行任何操作。
  11. 主线程 [M] 耗尽了要做的事情并终止。
  12. 当主线程 [M] 终止时,第一个创建的线程 [A] 上的 join() 调用将返回。
  13. 第一个创建的线程 [A] 打印 22。
  14. 第一个创建的线程 [A] 死亡。
  15. 当第一个创建的线程 [A] 终止时,对第二个创建的线程 [B] 的 join() 调用将返回。
  16. 第二个创建的线程 [B] 打印 12。
  17. 第二个创建的线程 [B] 终止。
  18. JVM 关闭,因为所有线程都已死亡。

关于java - 这个程序发生了什么,更重要的是,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3670349/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com