我有一个连接到设备的小程序,并通过SNMP协议获得其参数。它在JRE 6u20上工作正常,但在将JRE更新到6u25后效果不佳。
在6u20上检索设备参数花了几秒钟,但是在6u25它需要更多,最后大多数参数都没有被检索。
有一个SwingWorker用于阅读每个参数,我使用这个Java SNMP Package。
这些版本的JRE之间的差异是什么?如何找出导致问题的原因?
答案 0 :(得分:4)
最后我弄明白了问题是什么。 Java SNMP Package GetRequest不是线程安全的。在JRE 6u20上没有问题,因为JRE 6u20中的SwingWorker默认线程池只有一个工作线程但在JRE 6u25中工作线程的数量是10
SwingWorker.MAX_WORKER_THREADS = 10;
通过在SNMP get request方法中添加“ synchronized ”关键字,问题就解决了。
synchronized public SNMPVarBindList getMIBEntry(String itemID)