0
我試圖插入元素,以一個可變的地圖和我試過了,我得到了例外如下:插接件的斯卡拉可變地圖拋出錯誤
java.lang.ArrayIndexOutOfBoundsException: 62388
at scala.collection.mutable.HashTable$class.resize(HashTable.scala:255)
at scala.collection.mutable.HashTable$class.scala$collection$mutable$HashTable$$addEntry0(HashTable.scala:151)
at scala.collection.mutable.HashTable$class.findOrAddEntry(HashTable.scala:163)
at scala.collection.mutable.HashMap.findOrAddEntry(HashMap.scala:39)
at scala.collection.mutable.HashMap.$plus$eq(HashMap.scala:89)
at scala.collection.mutable.HashMap.$plus$eq(HashMap.scala:39)
at test.testMethod(AkkaLoadTest.scala:165)
at test.testMethod(AkkaLoadTest.scala:27)
at rait$PriceRequestWorker$$anonfun$receive$2.applyOrElse(AkkaLoadTest.scala:224)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425)
at akka.actor.ActorCell.invoke(ActorCell.scala:386)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:230)
at akka.dispatch.Mailbox.run(Mailbox.scala:212)
at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:502)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
它通過看起來很奇怪!這是我做的:
var mutableMap= scala.collection.mutable.Map[String, List[String]]()
我全局聲明地圖在我的對象,在我的TestMethod的,我做到以下幾點:
if(anotherList.size > 0) {
mutableMap.get(id) match {
case Some(entries) => /* Do nothing as the entry is already available in the map */
case None => {
mutableMap+= id-> anotherList
}
}
}
的ID作爲另一個參數傳遞給上述方法代碼被執行。我很困惑,看到在我看來沒有任何意義的例外!有任何想法嗎?
是的,我用的演員。我知道這個異常是由於共享狀態造成的。但是我也有一個全局的ListBuffer,它的行爲以線程安全的方式進行,我總是得到在全局ListBuffer中填充的適當的元素集合。這是爲什麼? – sparkr
@ user3102968你很幸運,這就是爲什麼。 – wheaties