dje*_*lin 3 java multithreading thread-safety
一个有点不正统的情况 - 基本上我有线程A监控线程B.如果线程A检测到线程B负责的一个周期性任务(线程B不是a的一部分ThreadPoolExecutor,它是MINA的线程之一)已经过时,线程A报告错误.所以我得到了这些错误,并想知道线程B被卡住的位置.因此,线程A调用线程B getStackTrace()并打印堆栈似乎很聪明,因此我可以看到愚蠢的活动B被卡住了.
在实践中,我会很自在地做这个,因为如果任务没有运行,机会B的堆栈在相当长的一段时间内没有改变,因为B被阻止了.但是在理论上,有时在实践中,当线程A试图获得其堆栈跟踪时,线程B的堆栈将会发生变化.所以我想知道这是否是线程安全的操作.
看Thread它的源代码似乎getStackTrace()使用了一种private static native dumpThreads()方法.Thread.getAllStackTraces()使用相同的方法,根据其javadoc是线程安全的:
调用此方法时,线程可能正在执行.每个线程的堆栈跟踪仅表示快照,并且可以在不同时间获得每个堆栈跟踪.如果虚拟机没有关于线程的堆栈跟踪信息,则将在映射值中返回零长度数组.
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |