0

を含むオブジェクトCollectedInfoがありますHashtable。このアプリケーションでは、これにデータを入力しHashtable、それを繰り返して挿入操作を実行します。この操作を実行するために同時に使用されるさまざまなスレッド。

から値を取得しているときHashtableに、AbstractMethodError例外が表示され、のgetメソッドからのトレースが表示されますHashtable。この例外が発生するとすぐに、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を使用しており、この問題が再現されているOSはLinux Red Hat Enterprise Linux Serverリリース5.6ベータ版(Tikanga)です。

4

2 に答える 2

2

まず、 aHashtableは基本的に aHashMapであるため、...

あなたが持っている:

  • aHashMap
  • HashMapを同時に使用する複数のスレッド

同時アクセス用にコーディングされている必要があるのは何ですか。HashMap

幸いなことに、1 つが既に存在します: ConcurrentHashMap. コードに必要な唯一の変更は、特別なスレッドセーフな方法を使用することですputIfAbsent(K, V)

于 2012-06-07T07:39:20.280 に答える
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
 }
于 2012-06-07T06:29:50.453 に答える