相关疑难解决方法(0)

如何使用ExecutorService等待所有线程完成?

我需要一次执行4个任务,如下所示:

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
while(...) {
    taskExecutor.execute(new MyTask());
}
//...wait for completion somehow
Run Code Online (Sandbox Code Playgroud)

一旦完成所有内容,我该如何收到通知?现在我想不出比设置一些全局任务计数器更好的事情,并在每个任务结束时减少它,然后在无限循环中监视这个计数器变为0; 或获得一个Futures列表,并在无限循环监视器isDone中为所有这些.什么是更好的解决方案不涉及无限循环?

谢谢.

java parallel-processing concurrency multithreading executorservice

362
推荐指数
11
解决办法
30万
查看次数

C#:等待所有线程完成

我正在编写我正在编写的代码中的常见模式,我需要等待组中的所有线程完成,并且超时.超时应该是所有线程完成所需的时间,因此简单地为每个线程执行thread.Join(timeout)将不起作用,因为可能的超时是超时*numThreads.

现在我做类似以下的事情:

var threadFinishEvents = new List<EventWaitHandle>();

foreach (DataObject data in dataList)
{
    // Create local variables for the thread delegate
    var threadFinish = new EventWaitHandle(false, EventResetMode.ManualReset);
    threadFinishEvents.Add(threadFinish);

    var localData = (DataObject) data.Clone();
    var thread = new Thread(
        delegate()
        {
            DoThreadStuff(localData);
            threadFinish.Set();
        }
    );
    thread.Start();
}

Mutex.WaitAll(threadFinishEvents.ToArray(), timeout);
Run Code Online (Sandbox Code Playgroud)

但是,对于这种事情,似乎应该有一个更简单的习语.

c# multithreading

63
推荐指数
6
解决办法
10万
查看次数

如何等待所有线程(可变数量的线程)完成继续使用Main?

我将根据for循环中的用户输入创建多个线程.因此我无法为它们指定名称.有没有办法等待所有人完成继续我的主线程?我想让他们完成那个for循环.我知道我需要使用连接但是有很多线程,我将如何使用它?或者还有另一种方式吗?它会是这样的:

for(int i = 0; i<inputs.size(); i++)
  new SimpleThread(parameters).start();
Run Code Online (Sandbox Code Playgroud)

继续只有主线程,其他人完成.

我怎样才能做到这一点?

java multithreading

2
推荐指数
2
解决办法
3366
查看次数