我对Java的线程世界比较陌生,需要一些帮助。我正在使用一种深度递归算法来构建一个基于Graphstream (http://graphstream-project.org/)库的图。但是,我遇到了Stackoverflow错误。我确信我的算法是正确的(我在小规模上进行了测试)。
我读到了关于线程的文章,以及线程是如何帮助你的。我的想法是为每个递归生成一个新的线程(可能会达到数百万:( )..这也会生成很多子图。最后,我将不得不将所有这些子图合并到一个线程中。你们认为这真的有助于摆脱堆栈溢出问题吗?或者你对我有什么其他的想法吗?谢谢!
发布于 2013-07-22 21:58:51
一般来说,您的想法称为MapReduce。谷歌搜索应该可以帮助你找到一个示例实现。
由于您的问题是堆栈溢出错误,请记住,您可以将每个递归重写为不会导致堆栈溢出错误的循环算法。
创建大量线程通常不是一个好主意。只需使用ThreadPool或Executor服务即可。
发布于 2013-07-22 19:34:28
数以百万计的线程不是一种优雅的方式。在java.concurrent.Executor上启动Runnables,而不是线程。这样,您还可以摆脱Stackoverflow,并使算法在所有可用的处理器上并行运行。
https://stackoverflow.com/questions/17785502
复制相似问题