我建立在Java分析工具的基础上,该机制要求应用程序的所有线程实例都由子类“ ProfilingThread”替换,该子类覆盖某些线程的行为以实现分析功能。
给定Java应用程序的源代码,我可以简单地将所有“ Thread”类重构为“ ProfilingThread”类。但是,AWT事件调度程序的线程不是由用户的代码实例化的,而是在调用AWT函数时自动创建的。
如何用ProfilingThread实例替换AWT事件调度程序的Thread实例?
欢迎所有想法和批评。
首先要提出一点批评:在生产级应用程序中入侵Java内部通常不是一个好主意。
更好的解决方案是为事件分派线程的任何实例添加专门的处理,并且仅分析您自己的类。java的其他部分也很有可能会启动也不会从ProfilingThread扩展过来的其他线程...
但是,如果您必须更改AWT事件分配线程:
事件调度线程是java.awt.EventDispatchThread
系统事件队列中的一个实例,可以通过以下方式获取
Toolkit.getDefaultToolkit().getSystemEventQueue()
要替换线程,您必须重新java.awt.EventDispatchThread
使用ProfilingThread
或更好地扩展EventDispatchThread
并添加分析功能。
然后,您必须使用反射设置字段,因为它是私有的,通常不能从外部进行更改。(有很多有关如何执行此操作的示例)
作为参考:http : //developer.classpath.org/doc/java/awt/EventQueue-source.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句