当前位置: 首页 > 知识库问答 >
问题:

这个线程连接代码是什么意思?

太叔豪
2023-03-14

在这段代码中,两个连接和断开是什么意思?t1.join()导致t2停止,直到t1终止?

Thread t1 = new Thread(new EventThread("e1"));
t1.start();
Thread t2 = new Thread(new EventThread("e2"));
t2.start();
while (true) {
   try {
      t1.join();
      t2.join();
      break;
   } catch (InterruptedException e) {
      e.printStackTrace();
   }
}

共有3个答案

阴永逸
2023-03-14

join() 表示等待线程完成。这是一种阻止方法。您的主线程(执行 join() 的线程)将在 t1.join() 行上等待,直到 t1 完成其工作,然后对 t2.join() 执行相同的操作。

奚曦哲
2023-03-14

这是一个最受欢迎的Java面试问题。

Thread t1 = new Thread(new EventThread("e1"));
t1.start();
Thread e2 = new Thread(new EventThread("e2"));
t2.start();

while (true) {
    try {
        t1.join(); // 1
        t2.join(); // 2  These lines (1,2) are in in public static void main
        break;
    }
}

< code>t1.join()的意思是,t1说类似“我想先完成”的话。< code>t2的情况也是如此。无论是谁启动了< code>t1或< code>t2线程(在本例中是< code>main方法),main都会等到< code>t1和< code>t2完成它们的任务。

然而,需要注意的一点是,t1t2t2本身可以并行运行,而与 t2上的联接调用顺序无关。等待的是main/daemon线程。

薄哲
2023-03-14

这个线程连接代码是什么意思?

引用线程.join() 方法的爪哇文档:

< code>join()等待该线程终止。

有一个线程正在运行您的示例代码,它可能是主线程。

  1. 主线程创建并启动t1和t2线程。这两个线程开始并行运行
  2. 主线程调用t1.join()等待t1thread完成
  3. t1线程完成,t1.join()method返回主线程。请注意,在进行join()调用之前,t1join
  4. 主线程调用t2.join()等待t2thread完成
  5. t2线程完成(或者它可能在t1线程完成之前完成), 方法返回主线程

重要的是要了解 t1t2 线程一直在并行运行,但启动它们的主线程需要等待它们完成才能继续。这是一种常见的模式。此外,t1 和/或 t2 可能在主线程调用 join() 之前完成。如果是这样,那么加入()将不会等待,但会立即返回。

t1.join()表示使t2停止,直到t1终止?

不会。调用< code>t1.join()的主线程将停止运行,并等待< code>t1线程完成。< code>t2线程并行运行,完全不受< code>t1或< code>t1.join()调用的影响。

就try/catch而言,< code>join()抛出< code > interrupted exception ,这意味着调用< code>join()的主线程本身可能会被另一个线程中断。

while (true) {

循环中使用连接是一种奇怪的模式。通常,您会先执行第一个联接,然后再执行第二个联接,在每种情况下适当地处理InterruptedException。没有必要把它们放在一个循环中。

 类似资料:
  • b & 0xFF for b in这个怎么理解

  • 我运行了几个测试场景,其中我从SOAP客户端调用远程系统的SOA服务,并遇到了各种远程异常。你能帮我确定每个错误意味着什么吗- 1) java.net网站。ConnectException:连接被拒绝“ 2)Java . net . socket time out异常:连接超时" 3) 连接异常: 连接超时”

  • 问题内容: 我是Go的新手,在浏览其他一些线程时遇到了以下代码行: 含义是什么?它是否指定将在if条件中分配某些内容(因为err似乎正在发生这种情况)?我在Wiki上找不到这种语法的示例,并且我很好奇它的用途。 问题答案: 因为返回两个值,所以如果需要它们中的任何一个,都必须在某个地方接收这些值。该是一个占位符,基本的意思是“我不关心这个特殊的返回值。” 在这里,我们只关心检查错误,而无需对实际的

  • 问题内容: 我在阅读“ JPA 2.0中的动态类型安全查询”一 文,偶然发现了以下示例: 我想知道,这里的下划线到底是什么意思? 由于下划线是类名的有效部分,所以我不明白为什么可以在JPA中使用它。我用代码中的现有实体检查了这个,当然我的班级无法解析为 问题答案: 那就是持久性的元模型。这是您可以在Java中键入安全JPA查询的方法。它允许查询静态地检查您的查询,因为类描述了您的JPA 。在HQL

  • 问题内容: 我想知道什么是Java线程转储。有人可以帮我了解什么是线程转储以及它与正在运行的Java程序的关系吗? 问题答案: Java线程转储是一种找出JVM中每个线程在特定时间点正在做什么的方法。如果您的Java应用程序有时在负载下运行时挂起,这将特别有用,因为对转储的分析将显示线程卡在哪里。 您可以通过运行并通过单击生成线程转储。 要了解如何从JVM进行线程转储,请参见此处 要了解如何创建线

  • 问题内容: 我试图从E3roid示例运行示例。除了我什么时候,我都会在页面上强行关闭。这是logcat错误。通过查看它,您能否告诉我这意味着什么,什么问题? 问题答案: 您是否已将AndroidActivity添加到AndroidManifest?