Java MultiThreading和递归方法?

时间:2016-02-04 01:29:49

标签: java multithreading recursion

我有一个关于混合多线程和递归方法的问题。假设您使用线程中具有一些递归方法的对象。 stackoverflow例外有没有机会?坦率地说,我写了一个商店模拟,我只使用一种递归方法来生成唯一的id,并且我在大约1分钟后恢复了stackoverflow异常。 你有没有遇到同样的问题,或者我是第一个? :(

提前致谢:)

2 个答案:

答案 0 :(得分:0)

由于两个原因,你会得到这样的例外。 1.多线程与否,如果你的方法有永无止境的风险,你会得到一个StackOverflowException但这将是一个纯代码错误。 2.如果您的类是具有多个线程访问的属性的Singleton,则会有另一个线程修改该属性的风险,导致当前线程永远不会到达递归结束,因为它使用的属性会被意外修改。如果是这样,也许将该属性设为Thread local。 也许分享一些代码,以便我们可以提供更好的帮助。

答案 1 :(得分:0)

除了其他人已经提到的内容之外,您可能正在耗尽堆栈空间。您可以通过设置命令行选项-Xss来设置堆栈大小。例如:     java -Xss 1M MyClass

小心不要设置得太高。如果你继续将它设置得更高并且不断出现堆栈溢出,那么你的递归可能会出现问题,正如其他人已经指出的那样。