电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

线程堆:给你的线程命名,察看你的系统


发布日期:2019/9/21
 

集成开发环境(IDE)能给图形界面应用程序提供一个很好的调试工具但是它却不能调试一个多线程的Java服务器程序

幸运的是有几种工具例如logging应用程序接口(API)或者Java Debugger可以用来调试Java服务器程序开发者还能使用一个系统的线程堆在任何时候观察系统的状态

运行服务器然后按[ctrl] [/]会运行一个系统线程堆这样将输出当前运行的所有线程例如

^\Full thread dump:

Thread prio= tid=xfe nid=xb waiting on monitor [xbfffef]

Thread prio= tid=xafde nid=xa runnable [xfxfb]

at PlainSocketImplsocketAccept(Native Method)

at PlainSocketImplaccept(PlainSocketImpljava:)

at ServerSocketimplAccept(ServerSocketjava:)

at ServerSocketaccept(ServerSocketjava:)

at coPortListenerrun(PortListenerjava:)

at javalangThreadrun(Threadjava:)

Signal Dispatcher daemon prio= tid=xaf nid=xaf waiting on monitor []

Finalizer daemon prio= tid=xac nid=xd waiting on monitor [xaxab]

at javalangObjectwait(Native Method)

at javalangrefReferenceQueueremove(ReferenceQueuejava:)

at javalangrefReferenceQueueremove(ReferenceQueuejava:)

at javalangrefFinalizer$FinalizerThreadrun(Finalizerjava:)

Reference Handler daemon prio= tid=xab nid=xcca waiting on monitor [xxb]

at javalangObjectwait(Native Method)

at javalangObjectwait(Objectjava:)

at javalangrefReference$ReferenceHandlerrun(Referencejava:)

VM Thread prio= tid=xade nid=xca runnable

VM Periodic Task Thread prio= tid=xab nid=x waiting on monitor

后面的四个线程是标准线程而其他的则跟运行的服务器程序有关这两个线程被命名为Thread和Thread如果用Thread th = new Thread(runnableServer)代替Thread th = new Thread(runnable)去创建进程你就可以命名自己要创建的线程

另外如果你调用javalangThread的setName(String)方法你也能命名你的线程并且可以很容易从线程堆的输出中发现原来的Thread是服务器程序

Server prio= tid=xafde nid=xa runnable [xfxfb]

而原来的Thread线程现在变成了Thread

通过命名线程和取得线程堆开发者就能看到Java虚拟机(JVM)的内部状态如果想得到更多信息的话你就得去研究Java Debugger了

上一篇:设计模式:设计自己的MVC框架

下一篇:单件模式singleton的理解