Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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
Graphstream多线程-Java_Java - Fatal编程技术网

Graphstream多线程-Java

Graphstream多线程-Java,java,Java,我对Java的线程世界比较陌生,需要一些帮助。我正在使用深度递归算法基于Graphstream()库构建一个图。但是,我遇到了一个Stackoverflow错误。我确信我的算法是正确的(我在小规模上进行了测试) 我读到了关于线程的内容,以及这会有什么帮助。我的想法是为每个递归生成一个新线程(可能会达到数百万:()…这也会生成很多子图..最后,我必须将所有这些子图合并到一个线程中。你们认为这真的有助于消除堆栈溢出问题吗?或者你们还有其他想法吗?谢谢!数百万个线程不是一种优雅的方式。在上启动Runn

我对Java的线程世界比较陌生,需要一些帮助。我正在使用深度递归算法基于Graphstream()库构建一个图。但是,我遇到了一个Stackoverflow错误。我确信我的算法是正确的(我在小规模上进行了测试)


我读到了关于线程的内容,以及这会有什么帮助。我的想法是为每个递归生成一个新线程(可能会达到数百万:()…这也会生成很多子图..最后,我必须将所有这些子图合并到一个线程中。你们认为这真的有助于消除堆栈溢出问题吗?或者你们还有其他想法吗?谢谢!

数百万个线程不是一种优雅的方式。在上启动Runnables而不是线程java.concurrent.Executor。通过这种方式,您还可以消除堆栈溢出,并使算法在所有可用的处理器上并行运行。

数百万个线程不是一种优雅的方式。在java.concurrent.Executor上启动Runnables,而不是线程。通过这种方式,您还可以消除堆栈溢出,并使算法并行运行在所有可用的处理器上。

您的想法通常称为.google,这将帮助您找到一个示例实现

由于您的问题是堆栈溢出错误,请记住,您可以将每个递归重写为不会导致堆栈溢出错误的循环算法


创建大量线程通常不是一个好主意。只需使用
线程池
执行器
服务即可。

您的想法通常称为。谷歌搜索可以帮助您找到示例实现

由于您的问题是堆栈溢出错误,请记住,您可以将每个递归重写为不会导致堆栈溢出错误的循环算法



创建大量线程通常不是一个好主意。只需使用
ThreadPool
Executor
服务。

发布一些代码和异常堆栈。此错误主要发生在堆用完时,主要发生在无限循环的情况下。线程不是,IMHO,递归导致堆栈溢出的正确答案。您最好例如,使用堆栈将递归替换为迭代。尝试迭代而不是递归。如果没有尾部调用优化,java将无法处理1m递归函数调用。感谢你们的快速回答。我已经尝试增加堆栈(-Xss20m)。函数仍然没有终止。它只是运行了更多的递归。因此,底线是,即使使用线程也不会对我有任何帮助??我有点试图避免迭代。@Reddy,StackOverflower错误发生在堆栈而不是堆用完时。如果堆用完并尝试在堆上分配某些内容,则可能会得到OutOfMemory错误。发布一些代码和异常堆栈。此错误主要发生在堆用完时,主要发生在无限循环的情况下。IMHO,线程不是由递归引起的堆栈溢出错误的正确答案。您最好用迭代替换递归,例如使用堆栈。尝试迭代而不是递归。不使用尾部调用o假设,java不会处理1m递归函数调用。谢谢你们的快速回答。我已经尝试增加堆栈(-Xss20m)。函数仍然没有终止。它只是运行了更多的递归。因此,底线是,即使使用线程也不会对我有任何帮助??我有点试图避免迭代。@Reddy,StackOverflower错误发生在堆栈而不是堆用完时。如果堆用完并尝试在堆上分配某些内容,则可能会得到OutOfMemory错误。谢谢Alexei。我听到了!想法是每100或200个递归创建一个新线程。我会看看你的建议。我会尽快回复你。Thanks@pro其思想是根本不创建线程,而是创建提交给执行者的作业,执行者有一定数量的线程可重用uping数(数百?数千?)每个作业的节点是个好主意,因为同步开销会更小。我做了一个。这是非常简单的java 1.7。我用C++处理阿列克谢的并行处理,我处理的是一个数据负载,我更喜欢使用java 1.7的Foo/Join框架。我发现了一个很好的文章,它解释了每个数据。范例非常好…谢谢Alexei。我听到了!想法应该是每100或200个递归创建一个新线程。我会看看你的建议。我会尽快回复你。Thanks@pro其思想是根本不创建线程,而是创建提交给执行器的作业,执行器有一定数量的线程他重复使用。分组几个(数百?数千?)每个作业的节点是个好主意,因为同步开销会更小。我做了一个。这是非常简单的java 1.7。我用C++处理阿列克谢的并行处理,我处理的是一个数据负载,我更喜欢使用java 1.7的Foo/Join框架。我发现了一个很好的文章,它解释了每个数据。范型非常好…谢谢你,伙计。我也读了很多关于迭代解的书。但那将是我最后一次尝试。递归解当然更性感。我看了你们给我建议的不同的解决方案。但是,我很难将其应用到图上下文中。基本上,对于每个计算的新节点,递归函数调用。我阅读的不同教程建议在划分任务时使用阈值或某种限制。但对于构建图表,我一点也没有限制…你们明白吗?@pro如果您在重写算法时遇到问题,请创建一个新的专用问题,向我们展示您迄今为止的尝试,我们将(可能:)帮你。这个问题是关于一个不同的主题,应该保持这种方式。你是对的。对不起。我将为此打开一个新的主题