2017-10-27 3 views
0

私はスレッドプール内で2つのスレッドを実行しています。私のアプリケーションは、実行した後にハングアップします。 1つのスレッドがMONITORにあり、もう1つがRUNNING状態になっていることをスレッド・ダンプで確認できます。 RUNNING状態のスレッドは、同期メソッドを入力してロックを取得し、最後にネイティブメソッドと呼ばれ、応答を停止したことを示します。しかし、それは状態を示してランニングです。 MONITOR状態の2番目のスレッドは、最初のスレッドがMONITORを解放するのを待ってブロックされます。スレッドダンプには最初のスレッドが実行中であることが示されていますが、2つのスレッドがデッドロックされています。私はそれがスレッドスタックが表示できないネイティブコードからいくつかのモニターを取得しようとしていると思われる。ネイティブコールのスレッドとJavaスレッドがデッドロックされている可能性はありますか?下記参照。 もう1つ。私が繰り返し実行すると、上記のようなデッドロックはコードの様々な部分で無作為に発生し、Javaとネイティブの間に貼り付けられるものだけでなく、時にはFile IO操作(ネイティブとネイティブの間) 。しかし、Javaとネイティブがデッドロックに陥る可能性はありますか?ありがとう。ネイティブスレッドはJavaスレッドをブロックできます

"[email protected]" prio=5 tid=0x14 nid=NA runnable 
    java.lang.Thread.State: RUNNABLE 
    blocks [email protected] 
     at java.lang.Object.clone(Object.java:-1) 
     at java.util.ResourceBundle$CacheKey.clone(ResourceBundle.java:655) 
     at java.util.ResourceBundle.putBundleInCache(ResourceBundle.java:1693) 
     at java.util.ResourceBundle.findBundle(ResourceBundle.java:1477) 
     at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1361) 
     at java.util.ResourceBundle.getBundle(ResourceBundle.java:845) 
     at com.sun.org.apache.xerces.internal.utils.SecuritySupport$7.run(SecuritySupport.java:169) 
     at com.sun.org.apache.xerces.internal.utils.SecuritySupport$7.run(SecuritySupport.java:166) 
     at java.security.AccessController.doPrivileged(AccessController.java:-1) 
     at com.sun.org.apache.xerces.internal.utils.SecuritySupport.getResourceBundle(SecuritySupport.java:166) 
     at com.sun.org.apache.xerces.internal.impl.xpath.regex.RegexParser.setLocale(RegexParser.java:99) 
     at com.sun.org.apache.xerces.internal.impl.xpath.regex.RegexParser.<init>(RegexParser.java:93) 
     at com.sun.org.apache.xerces.internal.impl.xpath.regex.ParserForXMLSchema.<init>(ParserForXMLSchema.java:41) 
     at com.sun.org.apache.xerces.internal.impl.xpath.regex.RegularExpression.setPattern(RegularExpression.java:2291) 
     at com.sun.org.apache.xerces.internal.impl.xpath.regex.RegularExpression.setPattern(RegularExpression.java:2308) 
     at com.sun.org.apache.xerces.internal.impl.xpath.regex.RegularExpression.<init>(RegularExpression.java:2266) 
     at com.sun.org.apache.xerces.internal.impl.dv.xs.XSSimpleTypeDecl.applyFacets(XSSimpleTypeDecl.java:844) 
     at com.sun.org.apache.xerces.internal.impl.dv.xs.XSSimpleTypeDecl.applyFacets1(XSSimpleTypeDecl.java:751) 
     at com.sun.org.apache.xerces.internal.impl.dv.xs.BaseSchemaDVFactory.createBuiltInTypes(BaseSchemaDVFactory.java:208) 
     at com.sun.org.apache.xerces.internal.impl.dv.xs.SchemaDVFactoryImpl.createBuiltInTypes(SchemaDVFactoryImpl.java:47) 
     at com.sun.org.apache.xerces.internal.impl.dv.xs.SchemaDVFactoryImpl.<clinit>(SchemaDVFactoryImpl.java:42) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeConstructorAccessorImpl.java:-1) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
     at java.lang.Class.newInstance(Class.java:442) 
     at com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:158) 
     at com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:143) 
     at com.sun.org.apache.xerces.internal.impl.dv.SchemaDVFactory.getInstance(SchemaDVFactory.java:73) 
     - locked <0x1226> (a java.lang.Class) 
     at com.sun.org.apache.xerces.internal.impl.dv.SchemaDVFactory.getInstance(SchemaDVFactory.java:57) 
     at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.reset(XMLSchemaLoader.java:1027) 
     at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:559) 
     at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:538) 
     at com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory.newSchema(XMLSchemaFactory.java:255) 
     at com.fmr.feeds.transformation.XmlProcessor.validateXml(XmlProcessor.java:52) 
     at com.fmr.feeds.transformation.XmlProcessor.validateInputXML(XmlProcessor.java:34) 
     at com.fmr.feeds.transformation.Controller.processRecord(Controller.java:99) 
     at com.fmr.feeds.transformation.Controller.lambda$invokeTransformationService$1(Controller.java:80) 
     at com.fmr.feeds.transformation.Controller$$Lambda$29.1090160486.run(Unknown Source:-1) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
     at java.lang.Thread.run(Thread.java:748) 

"[email protected]" prio=5 tid=0x13 nid=NA waiting for monitor entry 
    java.lang.Thread.State: BLOCKED 
    waiting for [email protected] to release lock on <0x1226> (a java.lang.Class) 
     at com.sun.org.apache.xerces.internal.impl.dv.SchemaDVFactory.getInstance(SchemaDVFactory.java:57) 
     at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.reset(XMLSchemaLoader.java:1027) 
     at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:559) 
     at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:538) 
     at com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory.newSchema(XMLSchemaFactory.java:255) 
     at com.fmr.feeds.transformation.XmlProcessor.validateXml(XmlProcessor.java:52) 
     at com.fmr.feeds.transformation.XmlProcessor.validateInputXML(XmlProcessor.java:34) 
     at com.fmr.feeds.transformation.Controller.processRecord(Controller.java:99) 
     at com.fmr.feeds.transformation.Controller.lambda$invokeTransformationService$1(Controller.java:80) 
     at com.fmr.feeds.transformation.Controller$$Lambda$29.1090160486.run(Unknown Source:-1) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
     at java.lang.Thread.run(Thread.java:748) 

答えて

0

(たとえば、CPUまたはファイルシステムのリソースを競合する)オペレーティングシステムを介してのみ。

ネイティブコードは、JVMによって監視されないスレッドをスピンアップさせる可能性がありますが、JVMのスレッドは、言語の観点からは、JVMによっても管理される他のスレッドでしかブロックできません(ネイティブコードが、 )。

スレッド[email protected]は現在スレッドダンプで何かしているようです。おそらく、CPUまたはOSのリソースを待っています。他のスレッドは、そのスレッドのコールスタックに保持されているロックを待機しています。

関連する問題