The last version (0.3.3) deadlocks very often while trying to get the blockchain. After it hangs, Ctrl-C cannot kill it (because the thread is waiting to obtain a lock and ignores interrupts), so the only way to kill the java process is kill -9. Which leaves blocks.nxt in a corrupted state, so next time I try to start it, it fails with EOFException... not much fun.
Looks like multiple threads are trying to update a HashMap (or several HashMaps) and deadlock one another. Would using a ConcurrentHashMap help?
"qtp2032502559-269" prio=10 tid=0x00007fb9286dd800 nid=0x4b83 waiting for monitor entry [0x00007fb9041
a2000]
java.lang.Thread.State: BLOCKED (on object monitor)
at Nxt$Block.pushBlock(Unknown Source)
- waiting to lock <0x00000000f5e3ff28> (a java.util.HashMap)
at Nxt.doPost(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
I see quite a few of the above when sending a kill -3 to the java process.