Eclipseen lukot näkyviin: http://www.eclipsezone.com/eclipse/forums/t44632.html Eli jumi tulee seuraavasti: (ks kuva http://users.jyu.fi/~vesal/kurssit/insitubt/src/TeachersApp/err/deadlock.png) 1. Core-Thread lähtee suorittamaan ProcessAll ja lukitsee LinkedList (id=4002) = connectionQueue 2. Sillä aikaa Keep-alive-thread lähtee suorittamaan TcpUserConnection.sendKeepAlive() ja lukitsee luokan insitu.core.KeepAliveThread (id=3683) Tapahtuu poikkeus, jonka takia lähdetään invokeException 3. invokeException lukitsee connection-olion 3734 (ei oleellista tässä) ja tulee sitä kautta queue-metodi kutsuun, jonka sisällä tarvittaisiin connectionQueue lukkoa (id=4002) Jää siis odottamaan 4. Core-Thread jatkaa suoritusta ja tulee connection 3686 onClose.metodiin josta kutsutaan KeepAliveThread.removeConnection( this ); jonka suoritus vaatii lukkoa insitu.core.KeepAliveThread (id=3683) tämä lukko on otettu kohdassa 2 ja niin tämäkin jää odottamaan. 5. Tulee muita Thredejä kuten Listener-Thread-0 (lukitsee connection olion 3750, ei oleellista tässä) joka tulee queue metodiin, mutta siellä tarvitaan lukkoa id=4002) = connectionQueue joka on kohdassa 1. lukittu. Jää odottamaan 6. [Thread-7] tulee ja (omistaa jostakin syystä lukon 4057, en tiedä miksi) ja haluaa tehdä KeepAliveThread.addConnection(AbstractConnection) line: 32 mutta tarvitsee siihen lukkoa insitu.core.KeepAliveThread) (id=3683) joka on vaiheeessa 2. lukittu ja odottaa vaiheessa 3, joten tämäkin jää odottamaan. Eli DeadLock syntyi jo vaiheissa 1-4 ja samaan rysään ajoi sitten vielä 5 ja 6. Nyt itse asiassa mikään ei pääse oikein toimimaan, koska Core-Thread on jumissa! ==================================================================================== Alla vielä pino tesktimuodossa: Thread [Keep-alive-thread] (Suspended) owns: TcpUserConnection (id=3734) owns: Class (insitu.core.KeepAliveThread) (id=3683) waiting for: LinkedList (id=4002) TcpUserConnection(Connection).queue() line: 95 TcpUserConnection(Connection).invokeException(IOException) line: 61 TcpUserConnection(Connection).send(OutgoingPacket) line: 233 TcpUserConnection.sendKeepAlive() line: 66 KeepAliveThread.sendKeepAlive() line: 50 KeepAliveThread.run() line: 85 Thread [DestroyJavaVM] (Running) Thread [Core-Thread] (Suspended) owns: LinkedList (id=4002) waiting for: Class (insitu.core.KeepAliveThread) (id=3683) KeepAliveThread.removeConnection(AbstractConnection) line: 37 TcpUserConnection.onClose() line: 88 TcpUserConnection(Connection).close() line: 306 Connection.processAll() line: 149 Core.run() line: 180 Thread [Thread-8] (Suspended) Thread [Thread-7] (Suspended) owns: ArrayList (id=4057) waiting for: Class (insitu.core.KeepAliveThread) (id=3683) KeepAliveThread.addConnection(AbstractConnection) line: 32 TcpUserConnection.onConnect() line: 76 TcpUserConnection(Connection).internalOpen(Socket) line: 284 TcpUserConnection(Connection).open(Socket) line: 267 TcpConnectionManager$1.onAccept(Socket) line: 22 AcceptThread.run() line: 97 Thread [Thread-9] (Suspended) Thread [Listener-Thread-0] (Suspended) owns: TcpUserConnection (id=3750) waiting for: LinkedList (id=4002) TcpUserConnection(Connection).queue() line: 95 TcpUserConnection(Connection).onReceive(String) line: 86 Connection.access$2(Connection, String) line: 83 Connection$Listener.read() line: 382 Connection$Listener.run() line: 353