栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

join()在Java中如何工作?是否保证在main()之前执行?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

join()在Java中如何工作?是否保证在main()之前执行?

简短答案

如何

join()
在Java 中工作?

我承认您的javadoc

join()
有点不清楚,因为
this
当您初次阅读它时,谁指的并不明显。

这意味着线程调用将

t.join()
阻塞直到线程
t
完成执行为止。如果
t
当前线程调用时已经完成
t.join()
,那么当前线程不会停止并且只会继续运行。
this
doc中的单词指的是
t
这里,而不是调用该方法的线程。

它能保证执行之前

main()
吗?

[…]如果不使用

main()
联接,则在任何地方执行线程执行[…]

您不应该

main()
整体考虑。的一部分
main()
在其他线程之前执行,部分在并行执行,然后在其他线程执行。这实际上是什么
start()
和
join()
控制。让我在下面解释。

你身上发生了什么
main()

以下是有关

t1.start()
和的事件顺序
t1.join()
。您显然可以以同样的方式思考
t3
。

  1. 执行

    main()
    前面的指令
    t1.start()

  2. t1.start()
    启动线程
    t1
    (
    t1.run()
    可能不会立即启动。)

  3. main()
    之间的指令
    t1.start()
    与
    t1.join()
    中的指令并行执行(*)
    t1.run()
    。
    注意:示例中没有任何内容,因此此时仅执行t1.run()指令。

  4. t1.join()
    :

    • 如果
      t1.run()
      已经完成,则什么也不会发生并
      main()
      继续进行
    • 如果
      t1.run()
      尚未完成, 则主线程停止并等待 直到
      t1.run()
      完成。然后
      t1.run()
      完成,然后
      main()
      继续。
    • 的指令
      main()
      后
      t1.join()
      执行

在这里您可以看到:

  • 保证
    main()
    前面的部分
    t1.start()
    在执行 之前
    t1.run()
  • 的部分
    main()
    以下
    t1.join()
    是保证被执行 之后
    t1.run()

(*)参见以下有关并行性的部分

我的意思是 “并行执行”

假设您在两个线程A和B中执行了这两组指令:

// Thread A        |     // Thread B        | System.out.println("A1");     |     System.out.println("B1");System.out.println("A2");     |     System.out.println("B2");System.out.println("A3");     |     System.out.println("B3");

如果这两个线程是“并行执行的”,则意味着三件事:

  • 保证线程A的指令执行顺序:
    A1将在A2之前执行,而A2将在A3之前执行。

  • 保证线程B指令的执行顺序:
    B1将在B2之前执行,而B2在B3之前执行。

  • 但是,A和B的指令可以交织,这意味着以下所有可能(甚至更多):

A1,B1,A2,B2,B3,A3

B1,B2,A1,B3,A2,A3

A1,A2,A3,B1,B2,B3 //特殊情况下,A都在B之前执行

B1,B2,B3,A1,A2,A3 //特殊情况,其中B都在A之前执行


注意: 本节将并行性视为由操作系统创建的一种错觉,以使用户感觉事情在同时运行,实际上,只有一个核心按顺序执行指令,从一个进程/线程跳转到另一个。

实际上,一条A指令和一条B指令可以在2个独立的内核上同时执行(真正的并行性)。
无论如何,上面的3个要点仍然存在。正如@jameslarge所指出的,通常我们会使用一系列事件来对并发进行建模,即使对于多核也是如此。这忽略了两个事件同时发生的概念,它不会带来任何有用的东西,但会带来并发症。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508858.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号