在我下面的代码片段中,该printStackTrace()
方法在catch block
. 运行程序后可以看到有时会printStackTrace()
连续运行多次,而不是按照printStackTrace()
--> catch block
-->的顺序运行finally block
。
如果更改为static boolean b
,false
则按System.out.print(e)
顺序执行。
那么为什么会有printStackTrace()
不同的行为方式呢?(线程的东西??)
public class PrintStackTrace {
static boolean b = true;
public static void main(String[] args){
for(int i = 0; i < 100; i++){
try{
throw new Exception("[" + i + "]");
}
catch(Exception e){
if(b){
e.printStackTrace();
}
else{
System.out.print(e);
}
System.out.print(" Catch: " + i);
}
finally{
System.out.print(" Finally: " + i);
}
System.out.println();
}
}
}