我有一个连接到设备并通过SNMP协议获取其参数的applet.它在JRE 6u20上工作正常,但是在将JRE更新为6u25之后,效果不佳.
在6u20上,检索设备参数花费了几秒钟,但是在6u25上,它花费了更多时间,最后大多数参数均未检索到.
有一个SwingWorker可以读取每个参数,我使用此Java SNMP Package.
这些版本的JRE之间有什么区别?如何找出造成问题的原因?
解决方法:
最后,我弄清楚了问题所在. Java SNMP Package GetRequest不是线程安全的.在JRE 6u20上没有问题,因为JRE 6u20中的SwingWorker默认线程池只有一个工作线程,但是在JRE 6u25中,工作线程数是10
SwingWorker.MAX_WORKER_THREADS = 10;
通过将“ synchronized”关键字添加到SNMP get请求方法中,可以解决此问题.
synchronized public SNMPVarBindList getMIBEntry(String itemID)