我正在使用第三方库对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