繁体   English   中英

我不懂主题

[英]I don't understand threads

假设我有个功能

Data[] foo(double[] someNumbers, Data[] someData, AnalyzeTool tool, int numOfThreads)

,数组的长度len相同。

现在,我想使用工具在该方法中调用numOfThreads线程,以处理每个Data.Object,并将其另一个写回到Data []中,以使给定的Data []和写入的Data []保持顺序。

假设一个线程现在已经完成了对一个数据对象的处理,我如何告诉该线程,还有剩余的数据尚未处理,请分配并“锁定”下一个数据对象进行处理? “锁定”应防止数据对象被多个线程多次处理。

有人举个例子吗? 欢迎任何形式的建设性帮助。

它将使用JDK 8和流来完成。 我在想像这样的事情:

List<Data> foo(List<Double> someNumbers, List<Data> someData, AnalyzeTool tool) {
    return someData.parallelStream().map((t, n) -> t.doSomething(n)).collect(Collectors.toList());
}

作为多线程的新手,以我的经验,我会做这样的事情:

考虑到我每个Data []项目都有很多任务要做。 让我们说每个数据项都是一件作品。

ExecutorService为您提供了一个工厂,工厂里有一组工作人员(线程池)来帮助您完成所有工作,Executor服务会在工作人员中的任何一个完成后立即将工作分配给每个工作人员(线程)。 ,还有更多工作要做,并为此分配了工作。

考虑以下示例:

ExecutorService executor = Executors.newFixedThreadPools(5);
//lets say we have 5 workers with us.

//then submitting all your work (a runnable) to the factory
for(int i=0;i<n;i++){
    executor.submit(new work(someData[i]));
}

执行程序将在您提交时开始进行工作,然后从池中拾取下一个。。。依此类推。

就在那时

executor.shutdown();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM