如何打印Java程序的线程栈信息
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要讲解了"如何打印Java程序的线程栈信息",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何打印Java程序的线程栈信息"吧!打印Java程
千家信息网最后更新 2026年11月03日如何打印Java程序的线程栈信息
这篇文章主要讲解了"如何打印Java程序的线程栈信息",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何打印Java程序的线程栈信息"吧!
打印Java程序的线程栈信息
jstack可以得知当前线程的运行情况
安装jstack等命令集,jstack是开发版本jdk的一部分,不是开发版的有可能找不到
yum install -y java-1.8.0-openjdk-devel
查看要打印堆栈的java进程ID
jps -l
打印堆栈
sudo -u admin jstack pid > jstack.txt
特别要注意的是jstack需要使用与进程一致的用户才能正确导出堆栈,否则会报错如下
Unable to open socket file: target process not responding or HotSpot VM not loaded
线程池异常堆栈的坑
import java.util.concurrent.*;public class DivTask implements Runnable{ int a,b; public DivTask(int a, int b) { this.a = a; this.b = b; } @Override public void run() { double re = a/b; System.out.println(re); } public static void main(String[] args) throws InterruptedException, ExecutionException {// ThreadPoolExecutor executor = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 0L, TimeUnit.SECONDS// , new SynchronousQueue<>()); TraceThreadPoolExecutor executor = new TraceThreadPoolExecutor(0, Integer.MAX_VALUE, 0L, TimeUnit.SECONDS , new SynchronousQueue<>()); //扩展TraceThreadPoolExecutor for (int i = 0; i < 5; i++) { // executor.submit(new DivTask(100,i)); //改进方式一: //Future re = executor.submit(new DivTask(100, i)); //re.get(); //改进方式二: executor.execute(new DivTask(100,i)); } //100.0 //25.0 //33.0 //50.0 //其中100/0的异常结果没打印 //线程池很有可能"吃掉程序抛出的异常 //改进方式一: //Exception in thread "main" java.util.concurrent.ExecutionException: java.lang.ArithmeticException: / by zero // at java.util.concurrent.FutureTask.report(FutureTask.java:122) // at java.util.concurrent.FutureTask.get(FutureTask.java:192) //。。。 //改进方式二: //Exception in thread "pool-1-thread-1" java.lang.ArithmeticException: / by zero // at com.Test.DivTask.run(DivTask.java:15) // at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) // at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) // at java.lang.Thread.run(Thread.java:748) //100.0 //33.0 //25.0 //50.0 //扩展TraceThreadPoolExecutor //java.lang.Exception: Client stack trace // at com.Test.TraceThreadPoolExecutor.clientTrace(TraceThreadPoolExecutor.java:20) // at com.Test.TraceThreadPoolExecutor.execute(TraceThreadPoolExecutor.java:12) // at com.Test.DivTask.main(DivTask.java:29) //Exception in thread "pool-1-thread-1" java.lang.ArithmeticException: / by zero // at com.Test.DivTask.run(DivTask.java:15) // at com.Test.TraceThreadPoolExecutor.lambda$wrap$0(TraceThreadPoolExecutor.java:25) // at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) // at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) // at java.lang.Thread.run(Thread.java:748) //100.0 //25.0 //33.0 //50.0 }}import java.util.concurrent.*;/** * 扩展TraceThreadPoolExecutor,让它在调度任务前先保存一下提交任务线程的堆栈信息 */public class TraceThreadPoolExecutor extends ThreadPoolExecutor { public TraceThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue); } @Override public void execute(Runnable task) { super.execute(wrap(task,clientTrace(),Thread.currentThread().getName())); } @Override public Future> submit(Runnable task) { return super.submit(wrap(task,clientTrace(),Thread.currentThread().getName())); } private Exception clientTrace(){ return new Exception("Client stack trace"); } private Runnable wrap(final Runnable task,final Exception clientTrace,String clientThreadName){ return () -> { try { task.run(); } catch (Exception e) { clientTrace.printStackTrace(); throw e; } }; }} 感谢各位的阅读,以上就是"如何打印Java程序的线程栈信息"的内容了,经过本文的学习后,相信大家对如何打印Java程序的线程栈信息这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
线程
信息
程序
堆栈
方式
学习
任务
内容
情况
进程
开发
一致
命令
就是
思路
文章
更多
版本
用户
知识
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司
互联网科技产业
互联网科技的发展
互联网科技集团
奇酷互联网科技
互联网与新科技
互联网科技上市公司
深圳天众互联网科技公司
成都狮子座互联网科技
佰商互联网科技有限公司
中国最先进互联网科技公司
海南科技产业互联网平台
济南华为互联网科技产业总部基地
以后互联网后是啥科技
互联网科技教育视频
来此购互联网科技有限公司
华中科技大学互联网的牛人
广州有谷有贝互联网科技有限公司
广东猫王互联网科技有限公司电话
颐高云石互联网科技
科技互联网产品
凡科互联网科技
长亮科技 互联网金融
互联网金融科技委员会
成都仁贤领冠互联网科技有限公司
互联网系的金融科技公司
互联网科技公司实习生
杭州壁岐互联网科技有限公司
黑云互联网科技有限公司
科技互联网公司两年变化