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

加入一组具有整体超时的线程

房育
2023-03-14

有没有办法在总超时的情况下同时加入一组线程?

假设我们有集合

for (Thread t : threads)
    t.join();

但我想等到所有线程都完成,或者经过一定的时间,以先到者为准。我正在搜索一个(假设的)<代码>线程组。join(int)执行此操作。

请注意,我所要求的与所做的不同

for (Thread t : threads)
    t.join(timeout);

更确切地说,我正在寻找比

int timeout = 10000;
for (Thread t : threads) {
    if (timeout <= 0) break;

    long start = System.currentTimeMillis();
    t.join(timeout);
    long end = System.currentTimeMillis();

    // substract time elapsed from next timeout:
    timeout -= (int) (end - start);
}

共有1个答案

徐麒
2023-03-14

首先创建一个CountDownLatch,其中包含组中每个线程的计数。

控制线程可以在闩锁上等待(超时,时间单位)。

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html#await-长java。util。同时发生的时间单位-

启动组中的线程。

组中的每个线程应在锁存完成时减少锁存。

控制线程将等待组中的所有内容完成或发生超时,并且由于wait返回布尔值,因此控制线程可以判断闩锁是自然递减还是发生超时。

 类似资料:
  • 问题内容: 调用Web服务时,我使用以下方法检查超时,但是我想专门检查是否返回超时错误。我该怎么做:S 我有这个: 问题答案: 作为go1.6的,从超时所有错误应符合与正确设置。您需要检查的只是: 在旧版本中,通过http包检查超时更为困难。 如果您在基础连接上设置了“截止日期”,则可以使用Timeout()获得一个。 您可以获得一个(显然不会导出)实现该接口的文件。 如果url包内有问题(初始连

  • 主要内容:一、MySql中的线程创建方式,二、具体源码,三、总结一、MySql中的线程创建方式 为了跨平台主要支持WIN和LINUX,在创建的源码中也可以看这两种创建的方式,在源码中可以清晰的看到区别这两的方式仍然使用的经典的宏判断。其实线程落到这里,基本上就回到了传统的线程处理的整个过程,只是看开发者对其是否进行二次封装和抽象。下面看一下相关的代码分析。 二、具体源码 从上一篇add_connection这个函数开始看: 首先检查一下有没有空闲的线程,如果有

  • 我正在开发基于spring+Hibernate的web应用程序。在这个应用程序中,我必须对数据库中的50000个可用记录进行计算。当前逻辑:- 循环0到50000(所有50000记录彼此独立) 选择第i个元素 对第i个元素执行计算(删除CALCULATION_TEMP表(如果存在),创建新表CALCULATION_TEMP并在CALCULATION_TEMP表中插入计算) 在步骤3表上进行一些计算

  • 问题内容: 我的文件很大,预计约为12 GB。我想将它们全部加载到功能强大的具有16 GB RAM的64位计算机上的内存中,但是我认为Java不支持那么大的字节数组: Java有可能吗? Eclipse编译器的编译错误是: javac给出: 问题答案: Java数组索引的类型(4个字节或32位),因此恐怕您的数组只能使用2 31 − 1或2147483647个插槽。我将数据读入另一个数据结构,例如

  • 我是react新手,在使用react路由器时遇到了一个问题,并写下以下代码: ReactDom.render(路由器,ulElement); 我希望路线中的组件可以附加一些道具,如下所示: 这样我就可以迭代应用程序的渲染函数中的“数据”。 App组件定义如下: }); 有人能帮我吗?我尝试了以下解决方案: 但它失败了,并表示this.props未定义。:(

  • 问题内容: 我有两个值: [3:6] 我试图在Golang中玩一些游戏,但是我找不到能够根据这些值创建数组的好方法。 我要实现的目标是: 问题答案: 您可以利用该构造使其更紧凑甚至更快: 出于好奇,可以在不使用循环变量的情况下实现循环,但是这样会更慢,并且代码也更长。通过递减: 或递增: