我最近测试了最新的java更新(2016-07-19发布)标准(自动更新)版本(1.8u101)与我们的webstart应用程序一起正常工作。但是更新102没有。
我们的用户界面无法加载或挂起。
一些挖掘(java控制台中的线程堆栈转储)在通过JNLPClassloader(webstart类加载器)加载类时发现了死锁。
我已经发现了一些已记录的错误,但是它们缺乏细节,而且oracles跟踪记录(从我的观点来看)修复webstart错误充其量只是乏善可陈。 https://bugs.openjdk.java.net/browse/JDK-8162342 https://bugs.openjdk.java.net/browse/JDK-8161700
我们已经设法通过确保某些操作按顺序发生(但在不同的线程上)来修复一些死锁,但是我们不能确定这会解决所有问题。
以下是一些部分线程堆栈转储,说明了死锁
"WorkerThread-8" #52 daemon prio=5 os_prio=0 tid=0x0000000054830800 nid=0x858 waiting for monitor entry [0x000000005959b000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.lang.ClassLoader.loadClass(Unknown Source)
- waiting to lock <0x00000000eac9cbd8> (a com.sun.jnlp.JNLPClassLoader)
at com.sun.jnlp.JNLPClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
- locked <0x00000000eac0a7b8> (a com.sun.jnlp.JNLPClassLoader)
at com.sun.jnlp.JNLPClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
...
"AWT-EventQueue-2" #42 prio=6 os_prio=0 tid=0x000000005482b000 nid=0xbdc waiting for monitor entry [0x0000000054458000]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
- waiting to lock <0x00000000eac0a7b8> (a com.sun.jnlp.JNLPClassLoader)
at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
- locked <0x00000000eac9cbd8> (a com.sun.jnlp.JNLPClassLoader)
...
有没有人对此有任何见解?或解决方法?
编辑:修复自动更新版本号