当前位置: 首页 > 面试题库 >

避免等待终止的线程

顾嘉纳
2023-03-14
问题内容

我遇到的问题是,有时我启动的线程在调用wait()它之前就完成了。看来这使我的程序等待不再发生的事情(notify())。如何确保不等待线程完成?

void someFunction() {

  MyThread thread = new MyThread();

  thread.start();

  // .. some stuff that takes sometimes quite long

  synchronized(thread) {
    try {
      thread.wait();
    } catch(InterruptedException e) {
      // ..
    }
  }
}

问题答案:

如果您阅读JavaDocs for Thread,它将告诉您 永远不要wait, notify, or notifyAll在Thread对象上使用。您应该使用join()



 类似资料:
  • 问题内容: 我需要启动大量goroutine,并等待其终止。直观的方法似乎是使用通道来等待所有操作完成: 但是问题是对象的数量以及goroutine的数量可能会改变。是否可以更改通道的缓冲区大小? 也许有更优雅的方式做到这一点? 问题答案: 我已经使用WaitGroup作为此问题的解决方案。翻译您的当前代码,并附上一些日志,以明确正在发生的事情:

  • 问题内容: 我正在使用 Java 8 Files.walk(..)来计算一个文件夹中包含的文件以及其中的所有文件夹。换句话说,我正在访问文件树的所有级别。 当我得到的关闭,我不希望这种行为。我需要它忽略或打印异常并继续计数文件。以下是我使用的代码:): 错误的StackTrace: 类似的问题, 尽管不尽相同 , 但我需要返回Stream 。 问题答案: 这是一个临时解决方案,可以改进以使用Jav

  • 这是ConcurrentLinkedQueue文档的描述: 基于链接节点的无限线程安全队列。此队列对元素 FIFO(先进先出)进行排序。 。 此实现采用高效的“免等待”算法 是否有可能无界和无等待? 我很确定等待自由确保了任何操作的约束。

  • 我使用这个来配置我的改装: 而方法将头添加到请求: 方法为: 在主线程上有一个来获取异步方法的响应,我知道这是一个不好的做法,但我需要这个方法来等待响应从其中获取令牌,然后返回令牌。我如何在一个单独的线程中这样做,以避免在主线程上等待? 注: 1-在任何带有改装的请求之前调用此命令。 2-我读了这篇文章,我知道我可以在请求失败后刷新令牌,但出于业务原因,我希望避免出现无效令牌。 3-我在我的中调用

  • 我需要启动Akka(2.0)演员系统,发送一些消息,然后等待它做重举。之后,我需要做一些与那些演员无关的事情。 我试图等待所有参与者停止以下代码: 所有演员通过<代码>自我自杀!PoisonPill。我做错了什么?

  • 在我的Rails 4应用程序中,我有一个对Postgres 9.4数据库的查询: 很受这个相关回答的启发dba.SE. 我只想让我的查询找到并更新第一行(随机地,用< code>LIMIT),其中< code>available = true并将其更新为< code>available = false,我需要在执行此操作的同时锁定该行,但不需要发出新的请求来等待前一个锁的释放,因为有许多并发调用将