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

时间:2012-06-07 06:12:48

标签: java hashtable

我们有一个对象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)。

2 个答案:

答案 0 :(得分:2)

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

你有:

  • a HashMap
  • 同时使用HashMap
  • 的多个主题

需要是为HashMap而编码以进行并发访问。

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

答案 1 :(得分:1)

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

//声明

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

//处理

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

           // write your desired code
 }