mon programme avait été bloqué, j'ai utilisé le commandant jstack pour analyser, le thread suivant a pris le verrou "0x0000000603f02ae0", et d'autres threads ne pouvaient pas aller chercher le verrou.
J'avais attendu au moins une heure, mais le fil n'a pas déverrouillé, ma question est pourquoi l'état du thread est en cours d'exécution, et arrêter à java.util.HashMap.getEntry (HashMap.java:347)? c'est le bug de l'oracle (soleil) de JDK?pourquoi java.util.HashMap.getEntry peut bloquer mon programme?
ma version jdk:
java version "1.6.0_21"
Java (TM) SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot (TM) 64 bits serveur VM (build 17.0- b16, mode mixte)
Les informations du fil:
"PandoraScheduleTrigger-fil-5" prio = 10 tid = 0x00000000443b0800 nid = 0x5804 runnable [0x0000000043722000] java.lang.Thread.State: rUNNABLE à java.util .HashMap.getEntry (HashMap.java:347) at java.util.HashMap.containsKey (HashMap.java:335) à com.youlongqingfeng.pandora.context.ArmiesContext._getArmy (ArmiesContext.java:239) à com.youlongqingfeng.pandora.context.ArmiesContext.getArmiesByCityId (ArmiesContext.java:169) à com.youlongqingfeng.pandora.model. City.getTotalApplianceMap (City.java:4519) à com.youlongqingfeng.pandora.model.City.calculateMemoryResource (City.java:4636) à com.youlongqingfeng.pandora.model.City.buildTaskFinish (City.java:1089) à com.youlongqingfeng.pandora.map.unit.ZhouMapResourceUnit.buildTaskFinish (ZhouMapResourceUnit.java:1618) - verrouillé < 0x0000000603f02ae0> (a com.youlongqingfeng.pandora.map.unit.ZhouMapResourceUnit) à com.youlongqingfeng. pandora.trigger. BuildTrigger.innerRun (BuildTrigger.java:39) à com.youlongqingfeng.gameserver.utils.threadpool.CancelTrigger.run (CancelTrigger.java:34)
thread dump bloqué:
« PandoraScheduleTrigger-fil-3 "prio = 10 tid = 0x0000000044c7c000 nid = 0x5802 en attente de l'entrée du moniteur [0x0000000043520000] java.lang.Thread.State: BLOCKED (sur le moniteur d'objet) at com.youlongqingfeng.pandora.map.unit.ZhouMapResourceUnit.armiesGroupReturnBack (ZhouMapResourceUnit. java: 2279) - en attente de verrouiller < 0x0000000603f02ae0> (un com.youlongqingfeng.pandora.map.unit.ZhouMapResourceU nit) à com.youlongqingfeng.pandora.trigger.ArmyGroupArrivedTrigger.innerRun (ArmyGroupArrivedTrigger.java:53) à com.youlongqingfeng.gameserver.utils.threadpool.CancelTrigger.run (CancelTrigger.java:34) à java.util. simult.Executors $ RunnableAdapter.call (Executors.java:441) à java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:303) à java.util.concurrent.FutureTask.run (FutureTask.java: 138) à java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access 301 $ (ScheduledThreadPoolExecutor.java:98) à java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:207) à java.util.concurrent .ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) à java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908) à java.lang.Thread.run (Thread.java:619)
merci.
Quels autres threads s'exécutent en même temps - en particulier, un autre thread accède-t-il à la même ressource? –
Voir http://stackoverflow.com/questions/10219724/vaadin-blocking-in-java-util-hasmap – Vadzim