在做一些算法开发的时候 我们经常在使用递归的时候 经常会遇到堆栈溢出,通常我们会想到设置jvm的参数来增加线程栈大小,但是这种会造成每个线程的栈都变的很大,此处介绍一个在代码中扩大线程栈大小。
-
public Thread(ThreadGroup group, Runnable target, String name,
-
long stackSize)
Thread类提供一个构造方法 可以指定线程栈大小
-
public static void main(String[] args) {
-
new Thread(
null,
new Runnable() {
-
int dep =
0;
-
-
@Override
-
public void run() {
-
try {
-
d();
-
}
catch (Throwable e) {
-
}
-
System.out.println(dep);
-
}
-
-
void d() {
-
dep++;
-
d();
-
}
-
}).start();
-
}
使用默认的栈我们的程序的深度大约为2w左右
-
public static void main(String[] args) {
-
new Thread(
null,
new Runnable() {
-
int dep =
0;
-
-
@Override
-
public void run() {
-
try {
-
d();
-
}
catch (Throwable e) {
-
}
-
System.out.println(dep);
-
}
-
-
void d() {
-
dep++;
-
d();
-
}
-
},
"thread-1",
1024
1024
30).start();
-
}
将栈大小设置为30M 此时 栈的深度可以达到650w左右