簡體   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