Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于列表/集操作的多线程实现的建议_Java_Multithreading_Algorithm_Set - Fatal编程技术网

Java 关于列表/集操作的多线程实现的建议

Java 关于列表/集操作的多线程实现的建议,java,multithreading,algorithm,set,Java,Multithreading,Algorithm,Set,我以前从未制作过支持多线程的Java程序,我想知道是否可以得到一些关于如何完成任务的建议 任务描述:从一组对象(无重复)OBJ开始。对于这些对象n中的每一个,从OBJ中删除n,这将留下OBJ-n。然后取OBJ-n的大小为i的子集。我们将调用所有子集的集合SUB和每个单独的子集SUBi。将n添加到每个SUBi以获得SUBi+n。然后移除增加SUBi+n总分数(任意分数度量)的对象。如果从SUBi+n中删除的对象为n,则从OBJ中删除n。否则,在i=1的情况下,对OBJ中的所有n继续此操作。对[1,

我以前从未制作过支持多线程的Java程序,我想知道是否可以得到一些关于如何完成任务的建议

任务描述:从一组对象(无重复)OBJ开始。对于这些对象n中的每一个,从OBJ中删除n,这将留下OBJ-n。然后取OBJ-n的大小为i的子集。我们将调用所有子集的集合SUB和每个单独的子集SUBi。将n添加到每个SUBi以获得SUBi+n。然后移除增加SUBi+n总分数(任意分数度量)的对象。如果从SUBi+n中删除的对象为n,则从OBJ中删除n。否则,在i=1的情况下,对OBJ中的所有n继续此操作。对[1,长度(OBJ)]范围内的所有i值重复此步骤

示例:从OBJ={A,B,C,D}开始。首先我们去掉A,剩下OBJ-n={B,C,D}。我们为OBJ-n创建一组子集,即{{B}、{C}、{D}。然后我们将A添加到这些SUBi中的每一个,以得到{A,B},{A,C},{A,D}。我们遍历这些SUBi+n,并移除增加SUBi+n分数的对象。我们首先来看{A,B}。假设移除B会增加分数。因为n当前是A,所以我们不从OBJ中删除A。我们移动到{A,C},这一次,发现移除A会增加分数,所以我们从OBJ移除A。我们停止扫描所有SUBi+n,这意味着我们甚至不关心{A,D}。然后我们移动到n的下一个值,即B(注意,A不再在OBJ中,所以我们在生成子集时不必关心它),并对OBJ中的所有n重复。我们对i从1到OBJ的当前长度重复整个过程


由于我没有多线程的经验,如果您能给我一些建议,告诉我如何将这个任务适当地分解为每个线程都可以执行的作业,我将不胜感激。我读过关于监视器和线程同步的内容,但不太确定如何在我的实现中使用这些资源。谢谢你的帮助

你能使你的要求更明确吗?如果您只是想增加在Java中编写正确的多线程程序的机会,请先阅读教程(例如,在Oracle网站上)。@KedarMhaswade我希望我的程序使用多线程运行得更快,而不是只使用单个线程运行。我已经完成了教程,并且能够找出如何实现我的程序,但是我希望在如何解决我的问题方面得到一些帮助。例如,多个线程将从OBJ中删除值。我应该如何实现这一点(例如同步或其他)?我应该为不同的I值同时执行任务,还是应该为单个n同时迭代每个SUBi+n?我想就如何将我的总体任务分解为每个问题的子任务提出一些建议。问题是你的问题太开放了。如果你提出更具体的问题,这里的许多人都能为你指出正确的方向。从一个简单的生产者消费者开始,使用执行器等并行执行许多任务,怎么样?您的问题可能可以建模为生产者-消费者问题,但同样,它对于Q+a网站来说太广泛了。