問題タブ [copyonwritearraylist]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
45 参照

arraylist - Java アプリが ConcurrentModificationException をスローする

これが私のコードです:

このコードは ConcurrentModificationException をスローします。私は CopyOnWriteArrayList を使用しようとしましたが、それが見つかりました.next() は前回削除された値を返します! どうすれば修正できますか?

0 投票する
1 に答える
142 参照

java - ArrayList vs HashMap — 反復とオブジェクト操作が多い

基本的に、大量のオブジェクトのデータ構造があり、この構造は複数のスレッドからアクセスされるため、それを考慮する必要があります。

多くの反復とオブジェクト操作を常に実行する必要があります (各メイン ループの反復により、最悪の場合はデータ構造内のすべてのオブジェクトが変更され、最良/通常の場合は何も変更されない可能性があります)。

現在、私はCopyOnWriteArrayList自分の構造として a を使用しています。さらに、繰り返しのたびに、リストのサイズを抑えるために、重複を追加しないようにしています。

これらの操作のためにスレッドを保持することを避けたいので、locks/synchronized の使用は理想的ではありません。

私が知る限り、これに対する私のオプションは次のとおりです。

  1. contains()追加する各要素のチェックを実行します
  2. リストからa を作成し、HashSet元に戻します (基本的にすべての重複を削除します) 。
  3. ConcurrentHashMapデータ構造にはリストの代わりに a を使用します
  4. 他の何か?

ArrayListsオブジェクト操作と重複チェックは厳密にa HashMap. 私の場合は両方が必要になるため、ここで最善の解決策は何かと考えています。

また、要素の順序は問題ではないことにも言及する必要があります。

編集:これをさらに明確にするために、コレクションには要素が常に追加、削除、および変更されます。どの程度までは特定の実行時間 (通常はランダムなイベントに基づく) に依存するため、どのくらいの頻度で発生するかについての仮定には注意が必要です。発生が保証されている唯一のことは、各要素に対して複数のチェックを実行して、コレクションが毎回完全に繰り返されることです。

0 投票する
1 に答える
1089 参照

java - copyonwritearraylist 奇妙なエラー

私はこのコードを持っています:

そして、私はこのエラーがあります:

スレッド「GeneralSTPool-8」での例外 java.lang.ArrayIndexOutOfBoundsException: 2 at java.util.concurrent.CopyOnWriteArrayList.get(Unknown Source) at java.util.concurrent.CopyOnWriteArrayList.get(Unknown Source) at net.sf.l2j. gameserver.model.RandomFight.pickPlayers(RandomFight.java:89) で net.sf.l2j.gameserver.model.RandomFight$pickPlayers.run(RandomFight.java:270) で net.sf.l2j.gameserver.ThreadPoolManager$RunnableWrapper. java.util.concurrent.Executors$RunnableAdapter.call で実行 (ThreadPoolManager.java:85) java.util.concurrent.FutureTask.run (不明なソース) で java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access でjava.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask で $201 (不明なソース)。java.util.concurrent.ThreadPoolExecutor.runWorker で実行 (未知のソース) java.util.concurrent.ThreadPoolExecutor$Worker.run (未知のソース) で java.lang.Thread.run (未知のソース) で

ここで何が起こっているのですか?89 行目は次のとおりfor(L2PcInstance player : players)です。rnd.get()から0までなので、これは表示されませんplayers.size() - 1

0 投票する
1 に答える
389 参照

java - CopyOnWriteArrayList のサイズ変更

同じ CopyOnWriteArrayList にアクセスするすべてのメソッド render、update、および majorUpdate が実行されると、render は正常に動作しますが、update および majorUpdate は CopyOnWriteArrayList の長さが 0 であると出力します。コードは次のとおりです。