我正在使用第三方庫對7張牌撲克手進行手牌評估。該庫中的方法evaluate
被聲明爲公共靜態,我相信它會改變類中的一些全局靜態數組。我遇到的問題是,因爲我正在做一個大約10m枚舉的枚舉算法,所以我要創建FutureTasks,每個評估10m評估的一小部分。我得到的錯誤是:靜態方法被多線程訪問,Java
java.util.concurrent.ExecutionException: java.lang.ArrayIndexOutOfBoundsException: -2147483648
at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
從我從谷歌搜索收集哪些試圖檢索中止通過拋出異常的任務的結果時造成的。
是否有某種方法可以使此靜態方法線程安全,就像每個線程正在編輯它自己的全局靜態數組副本一樣?
感謝
我可能會沿着「XX.evaluate()不是線程安全的」的方式打開一個針對庫的增強bug。這是假設圖書館有一些錯誤跟蹤,並積極維護。否則,如果該庫是開源的,你可以自己修復它,並向開發者提供補丁並使用你的補丁版本。 – 2010-03-05 14:23:58
它只發布而不改變它 – Aly 2010-03-05 14:31:05
你確定圖書館沒有試圖保持狀態來記住哪些卡片已被處理/顯示,並使用該信息爲一隻手提供更準確的「價值」? – ptomli 2010-03-05 14:32:43