繁体   English   中英

调用get方法时来自java.util.Hashtable的AbstractMethodError

[英]AbstractMethodError from java.util.Hashtable while calling get method

我们有一个对象CollectedInfo ,其中包含一个Hashtable 在我们的应用程序中,我们填充此Hashtable ,然后对其进行迭代以执行插入操作。 不同的线程同时用于执行此操作。

Hashtable检索值时,我们看到AbstractMethodError异常,显示了Hashtable get方法的跟踪。 此异常一到,Java应用程序就会崩溃。

我们无法重现异常,但是在一段时间内我们可以在应用程序中非常一致地看到相同的行为。

下面是跟踪:

SYS_ERR: Exception running task: java.lang.AbstractMethodError
SYS_ERR: java.lang.AbstractMethodError
SYS_ERR:     at java.util.Hashtable.get(Unknown Source)
SYS_ERR:     at poll.CollectedInfo.getValuesForColumn(CollectedInfo.java:1026)
SYS_ERR:     at poll.YYYMgr.saveData(YYYMgr.java:5346)
SYS_ERR:     at poll.YYYMgr.saveData(YYYMgr.java:2412)
SYS_ERR:     at poll.YYYMgr.saveData(YYYMgr.java:2250)
SYS_ERR:     at poll.CommonPollAPI.saveData(CommonPollAPI.java:579)
SYS_ERR:     at poll.XXXXData.run(XXXXData.java:76)
SYS_ERR:     at management.scheduler.WorkerThread.run(WorkerThread.java:70)

我们使用的是JRE 1.6.0,重现此问题的操作系统是Linux Red Hat Enterprise Linux Server 5.6 Beta(Tikanga)。

首先, Hashtable基本上是HashMap ,所以...

你有:

  • 一个HashMap
  • 同时使用HashMap多个线程

需要的是为并发访问编码的HashMap

幸运的是,已经存在一个: ConcurrentHashMap 您需要对代码进行的唯一更改是使用特殊的线程安全方法putIfAbsent(K, V)

以Iterator类对象,然后尝试获取哈希值。

//宣言

 Iterator itr = hashtable.keySet().iterator();

//处理

 while(itr.hasNext())
 { 
    String key = (String)itr.next();  
        String value = (String)hashtable.get(key); 

           // write your desired code
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM