今天写了个多线程计算TOP-K问题的程序,运行的时候发行线程池没有退出,在eclipse里bug的时候一直显示是running的状态,如图:
找人问题了下,说是用jstack打出线程信息可以查看到相关信息,
首先用windows的任务管理器找到这个进程,查找PID为1040,然后在java_home/bin下执行jstack 1040
然后查找第134行,发现是lock.lock()后,没有释放锁导致的问题,添加
finally {
lock.unlock();
},再运行,正常,OK
本文介绍了一个多线程计算TOP-K问题的程序出现死锁的问题及解决过程。通过使用jstack工具检查线程状态,发现lock.lock()后未释放锁导致死锁。最终通过添加finally块解锁解决了问题。
1372

被折叠的 条评论
为什么被折叠?



