จาวา 9 ได้เพิ่ม StackWalker คลาสเพื่อจัดเตรียม API มาตรฐานสำหรับการเข้าถึงเธรดสแต็กปัจจุบัน ใน Java เวอร์ชันก่อนหน้า เราสามารถใช้ Throwable::getStackTrace , Thread::getStackTrace และ SecurityManager::GetClassContext วิธีการให้ได้รับกองเธรด
Thread.getStackTrace() เมธอดจะส่งคืนอาร์เรย์ขององค์ประกอบการติดตามสแต็กที่แสดงถึงสแต็กดัมพ์ของเธรด (StackTraceElement[] ). องค์ประกอบแรกของอาร์เรย์แสดงถึงส่วนบนของสแต็ก อาจเป็นการเรียกใช้เมธอดสุดท้ายในลำดับ และองค์ประกอบสุดท้ายของอาร์เรย์แสดงถึงส่วนล่างของสแต็ก อาจเป็นการเรียกใช้เมธอดแรกในลำดับ /P>
ไวยากรณ์
StackTraceElement สาธารณะ[] getStackTrace()
ตัวอย่าง
<ก่อน>นำเข้า java.lang.StackWalker.Option; GetStackTraceTest คลาสสาธารณะ { โมฆะคงที่สาธารณะหลัก (สตริง args []) { GetStackTraceTest.testPrintCurrnentStackTrace (); GetStackTraceTest.testShowReflectFrames (); } // รับ StackTrace โดยใช้เธรด โมฆะคงที่สาธารณะ testPrintCurrnentStackTrace () { StackTraceElement[] stack =Thread.currentThread().getStackTrace(); สำหรับ (องค์ประกอบ StackTraceElement:กอง) { System.out.println (องค์ประกอบ); } } // SHOW_REFLECT_FRAMES พิมพ์โมฆะคงที่สาธารณะ (StackWalker stackWalker) { stackWalker.forEach (stackFrame -> System.out.printf ("%6d| %s -> %s %n",stackFrame.getLineNumber() , stackFrame.getClassName() , stackFrame.getMethodName() )); } โมฆะคงที่สาธารณะ testShowReflectFrames () { สุดท้าย StackWalker stackWalker =StackWalkergetInstance (ตัวเลือกSHOW_REFLECT_FRAMES ); พิมพ์ (stackWalker); }}ผลลัพธ์
java.base/java.lang.Thread.getStackTrace(Thread.java:1654)GetStackTraceTest.testPrintCurrnentStackTrace(GetStackTraceTest.java:10)GetStackTraceTest.main(GetStackTraceTest.java:5) 17| GetStackTraceTest -> พิมพ์ 25| GetStackTraceTest -> testShowReflectFrames 6| GetStackTraceTest -> หลัก