gpt4 book ai didi

java - 由于多线程,ArrayIndexOutOfBounds,我该怎么办?

转载 作者:行者123 更新时间:2023-12-01 12:50:12 24 4
gpt4 key购买 nike

我读过很多关于安全运行多线程的文章,但老实说我不知道​​在这种情况下该怎么办。我正在使用 API,我几乎必须使用这一行:

Character interactingMonster = myPlayer().getInteracting();

不幸的是,我同时运行三个单独的线程,并且由于某种原因我收到此异常,假设因为我同时共享资源:

[ERROR][06/18 09:54:56 AM]: Uncaught exception!
java.lang.ArrayIndexOutOfBoundsException: 32767
at org.api.Players.getLocalPlayer(Players.java:39)

我在多线程方面遇到的所有其他问题,都已通过使用线程安全数据类型(例如 AtomicLong 和 CopyOnWriteArrayList)修复,但在这种情况下,我需要一些建议。我需要找到一种方法来解决这个问题,而不必忽略使用多线程的好处。

有什么建议吗?

PS。我无权访问 myPlayer().getInteracting(); 它只是 API,其类已被混淆。

最佳答案

如果您调用的 API 不是线程安全的(文档应该告诉您,您的经验表明它不安全),那么您将需要同步对其的访问,因此一次只有一个线程可以调用它。如果调用始终在同一个方法中进行(并且其中没有发生太多其他事情),那么您可以使整个方法同步。或者,您可以有一个同步代码块,在这种情况下,您必须有一个要使用的对象,例如:

synchronized (myObject) {
// call to non-thread-safe API
}

并确保对同一 api 的所有调用使用相同的 myObject。

这会对性能产生影响,并且意味着您必须开始担心潜在的死锁。有许多关于 java 和线程安全的教程,使用“同步”和最近添加的 Lock 对象。

关于java - 由于多线程,ArrayIndexOutOfBounds,我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24280301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com