调用链监控仅仅获取调用顺序是不够的,如前所描述:
左边只体现了顺序,右边体现了顺序和调用栈信息。
在Java中获取调用栈的方法如下:
Thread.currentThread().getStackTrace()
代码示例:
public class Man { public static void main(String[] args) { Man man = new Man(); man.getup(); man.brushTeeth(); man.eat(); } public void getup() { System.out.println("getup"); } public void brushTeeth() { System.out.println("brush teeth"); } public void eat() { StackTraceElement[] elements = Thread.currentThread().getStackTrace(); for (int i = 0; i < elements.length; i++) { StringBuffer buffer = new StringBuffer(); buffer.append("index: ").append(i).append(" ClassName: ").append(elements[i].getClassName()) .append(" Method Name : " + elements[i].getMethodName()); System.out.println(buffer.toString()); } System.out.println("eat"); } }
输出结果:
getup brush teeth index: 0 ClassName: java.lang.Thread Method Name : getStackTrace index: 1 ClassName: com.javashizhan.demo.Man Method Name : eat index: 2 ClassName: com.javashizhan.demo.Man Method Name : main eat
可以看到第3个栈是调用eat的方法。
在实际代码中需要注意:
end.
<font color="#F4B183">加入《Java栈实战营》知识星球,参与讨论,更多实战代码分享,不就是几斤苹果,几个荣耀道具的事吗! </font>
https://t.zsxq.com/RNzfi2j