簡體   English   中英

java.lang.Class.getMethods中的Java級死鎖-CentOS-7.2

[英]Java-level deadlock in java.lang.Class.getMethods - CentOS-7.2

我試圖顯示一個類的所有方法名稱。 此代碼在發送的OS 6中可以正常工作

private static void extractClassMethods(Class classObject) {     

    // read the methods
    Method[] methods = classObject.getMethods();

    // no methods
    if (methods == null) {
        return;
    }

    // print method path
    for (Method method : methods) {  
        System.out.println(method.getName()) ;
    } 
}

查找完整的異常日志,

發現了一個Java級死鎖:

“線程24”:等待鎖定監視器0x00007fee807b66b8(對象0x00000007e060e490,org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader),由“線程15”持有。“線程15”:等待鎖定監視器0x00007feebc0101c8(對象“ 0x00000007e12564e8,一個java.lang.Object”,由“啟動級別事件分配器”“啟動級別事件分配器”持有:等待鎖定監視器0x00007fee807b66b8(對象0x00000007e060e490,org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader) ,由“ Thread-15”持有

上面列出的線程的Java堆棧信息:

“線程24”:位於org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:424)-等待將<0x00000007e060e490>(一個org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader)鎖定org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:189)的.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:413)在org.eclipse.osgi.framework.internal org.eclipse.osgi.framework.internal.core.SingleSourcePackage.loadClass(SingleSourcePackage.java:37)處的.core.BundleLoader.findLocalClass(BundleLoader.java:340)在org.eclipse.osgi.framework.internal.core.BundleLoader org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:369)的.findClassInternal(BundleLoader.java:405)在org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader .java:357),位於java.l的org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:83) 在java.lang.Class.privateGetDeclaredMethods(Class.java:2531)處的java.lang.Class.getDeclaredMethods0(本機方法)處的ang.ClassLoader.loadClass(ClassLoader.java:358)在java.lang.Class.privateGetPublicMethods(Class。 java.lang.Class.getMethods(Class.java:1467)上的java:2651)com.something.extractClassMethods(MethodAccessManager.java:102)上java.lang.Thread.run(Thread.java:744)上的“ Thread- 15“:位於com.eclipsesource.jaxrs.publisher.internal.JAXRSConnector.addResource(JAXRSConnector.java:110)-等待將<0x00000007e12564e8>(java.lang.Object)鎖定在com.eclipsesource.jaxrs.publisher.internal。 org.osgi.util.tracker.ServiceTracker $ Tracked.trackAdding(ServiceTracker.java :)上com.eclipsesource.jaxrs.publisher.internal.ResourceTracker.addingService(ResourceTracker.java:39)上的ResourceTracker.delegateAddService(ResourceTracker.java:45) 1064),位於org.osgi.util.tracker.ServiceTracker $ Tracked.track(ServiceTracker.java:1042),位於org.osgi.util.tracker.ServiceTracker $ Tracked.serviceChanged(ServiceTracker .java:975),位於org.eclipse.osgi.framework.internal.core.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:94),位於org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:1224 )於org.eclipse.osgi的org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:141)的org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:195)處。 org.eclipse.osgi.framework.internal.core.Framework.publishServiceEvent(Framework.java:1578)位於org.eclipse.osgi.framework.internal處的framework.internal.core.Framework.publishServiceEventPrivileged(Framework.java:1603)。 org.eclipse.osgi.framework.internal.core.BundleContextImpl.createServiceRegistration(BundleContextImpl.java:657)處的core.ServiceRegistrationImpl。(ServiceRegistrationImpl.java:103)在org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService (BundleContextImpl.java:609)在org.eclipse.osgi.framework.internal.core.BundleCo org.eclipse.osgi.framework.internal.core.BundleContextImpl $ 2.run(BundleContextImpl.java:999)上的ntextImpl.registerService(BundleContextImpl.java:675)在org.eclipse上的java.security.AccessController.doPrivileged(Native Method) org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:974)上的.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:993)在org.eclipse.osgi.framework org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:260)上的.internal.core.BundleHost.startWorker(BundleHost.java:346)在org.eclipse.osgi.framework.util.SecureAction org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java)上的.start(SecureAction.java:400)在org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:111) :417),位於org.eclipse.osg,位於org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:189) org.eclipse.osgi.framework上的i.framework.internal.core.BundleLoader.findLocalClass(BundleLoader.java:340)在org.eclipse.osgi.framework.internal.core.SingleSourcePackage.loadClass(SingleSourcePackage.java:37)在org.eclipse.osgi.framework。位於org.eclipse.osgi.framework.internal.core的internal.core.BundleLoader.findClassInternal(BundleLoader.java:405)位於org.eclipse.osgi.framework.internal.core的BundleLoader.findClass(BundleLoader.java:369)。 org.eclipse上java.lang.ClassLoader.loadClass(ClassLoader.java:358)上org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:83)上的BundleLoader.findClass(BundleLoader.java:357) .osgi.framework.internal.core.BundleContextImpl $ 2.run(BundleContextImpl.java:999)在java.security.AccessController.doPrivileged(本機方法)在org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl .java:993),位於org.eclipse.osgi.framewor上的org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:974) org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:260)的org.eclipse.osgi.framework.util上的k.internal.core.BundleHost.startWorker(BundleHost.java:346)。 org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.org)上的SecureAction.start(SecureAction.java:400)在org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:111) java:417)位於org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:189)位於org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass(BundleLoader.java:340) org.eclipse.osgi上的.eclipse.osgi.framework.internal.core.SingleSourcePackage.loadClass(SingleSourcePackage.java:37)在org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal(BundleLoader.java:405) .framework.internal.core.BundleLoader.findClass(BundleLoader.java:369)在org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(Bundle org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:83)處的Loader.java:357)java.lang.Class.getDeclaredMethods0處的java.lang.ClassLoader.loadClass(ClassLoader.java:358) (本機方法)於java.lang.Class.privateGetPublicMethods(Class.java:2651)於java.lang.Class.privateGetDeclaredMethods(Class.java:2531)於java.lang.Class.getMethods(Class.java:1467) com.something.extractClassMethods(java.lang.Thread.run(Thread.java:744)上的MethodAccessManager.java:102)“啟動級別事件分派器”:java.lang上的java.lang.Class.getDeclaredMethods0(本機方法)。 Java上的org.glassfish.jersey.server.model.IntrospectionModeller $ 2.run(IntrospectionModeller.java:236)上的java.lang.Class.getDeclaredMethods(Class.java:1855)上的Class.privateGetDeclaredMethods(Class.java:2531)。 org.glassfish.jersey.org上的security.AccessController.doPrivileged(本地方法)at org.glassfish.jersey.org上的org.glassfish.jersey.server.model.IntrospectionModeller.getAllDeclaredMethods(IntrospectionModeller.java:230) org.glassfish.jersey.server.model.IntrospectionModeller.doCreateResourceBuilder(IntrospectionModeller.java:118)上的.server.model.IntrospectionModeller.checkForNonPublicMethodIssues(IntrospectionModeller.java:170)在org.glassfish.jersey.server.model.IntrospectionModeller.access上在org.glassfish.jersey.server.model.IntrospectionModeller $ 1.call(IntrospectionModeller.java:111)處,在org.glassfish.jersey.server.model.IntrospectionModeller $ 1.call(IntrospectionModeller.java:$000) 108)at org.glassfish.jersey.internal.Errors.process(Errors.java:315)at org.glassfish.jersey.internal.Errors.process(Errors.java:297)at org.glassfish.jersey.internal.Errors org.glassfish.jersey.server.model.RetrospectionModeller.createResourceBuilder(IntrospectionModeller.java:108)處的.processWithException(Errors.java:255)at org.glassfish.jersey.server.model.Resource.from(Resource.java:744 ),位於org.gl的org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:411) org.glassfish.jersey.server.ApplicationHandler $ 3.run(ApplicationHandler.java:323)上org.glassfish.jersey.jersey.internal.Errors $ 2.call的assfish.jersey.server.ApplicationHandler.access $ 500(ApplicationHandler.java:163) (org.glassfish.jersey.internal.Errors $ 2.call(Errors.java:286)(org.glassfish.jersey.internal.Errors.process(Errors.java:315))(Errors.java:289) org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286)處的.jersey.internal.Errors.process(Errors.java:297)org.glassfish.jersey.server.ApplicationHandler。(ApplicationApplication.java: 320),位於org.glassfish.jersey.servlet.ServletContainer.reload,位於org.glassfish.jersey.servlet.WebComponent。(WebComponent.java:310),位於org.glassfish.jersey.server.ApplicationHandler。(ApplicationHandler.java:285)。 (ServletContainer.java:578)在com.eclipsesource.jaxrs.publisher.internal.JerseyContext.addResource(JerseyContext.java:71)在com.eclipsesource.jaxrs.publisher.internal.JAXRSConnector.registerResource(JAXRSConnecto) com.eclipsesource.jaxrs.publisher.internal.JAXRSConnector.registerResource(JAXRSConnector.java:122)上的com.eclipsesource.jaxrs.publisher.internal.JAXRSConnector.doAddResource(JAXRSConnector.java:116)上的r.java:140) .eclipsesource.jaxrs.publisher.internal.JAXRSConnector.addResource(JAXRSConnector.java:110)-將<0x00000007e12564e8>(java.lang.Object)鎖定在com.eclipsesource.jaxrs.publisher.internal.ResourceTracker.delegateAddService(ResourceTracker.java) :45),位於org.osgi的com.eclipsesource.jaxrs.publisher.internal.ResourceTracker.addingService(ResourceTracker.java:39),位於org.osgi.util.tracker.ServiceTracker $ Tracked.trackAdding(ServiceTracker.java:1064)。 org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:330)上的util.tracker.ServiceTracker $ Tracked.trackInitialServices(ServiceTracker.java:926)-鎖定<0x00000007e1256ab8>(com.eclipsesource.jaxrs.publisher。 com.eclipseso上的org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:274)上的internal.ResourceTracker) org.eclipse.osgi.framework.internal上的com.eclipsesource.jaxrs.publisher.internal.Activator.start(Activator.java:50)上的urce.jaxrs.publisher.internal.Activator.openAllServiceTracker(Activator.java:76)。在org.org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:993)上的java.security.AccessController.doPrivileged(本機方法)處的core.BundleContextImpl $ 2.run(BundleContextImpl.java:999) org.eclipse.osgi上的.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:974)在org.eclipse.osgi上的.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346) org.eclipse.update.internal.configurator.ConfigurationActivator.installBundles(ConfigurationActivator.java:216)的org.eclipse.update.internal.configurator.ConfigurationActivator的.framework.internal.core.AbstractBundle.start(AbstractBundle.java:260) .start(ConfigurationActivator.java:80)在org.eclipse.osgi.framework.internal.core.BundleContextImpl $ 2.run(BundleContext Impl.java:999),位於org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:993),位於org.eclipse.osgi.framework,位於java.security.AccessController.doPrivileged(本機方法)。在org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346)處的internal.core.BundleContextImpl.start(BundleContextImpl.java:974)在org.eclipse.osgi.framework.internal.core處。 org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1118)的org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(AbstractBundle.resume(AbstractBundle.java:350) org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:505)的org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java: 279)-在org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.ja)處鎖定<0x00000007e40c67c0>(java.lang.Object) va:465)在org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:195)在org.eclipse.osgi.framework.eventmgr.EventManager $ EventThread.run(EventManager.java:297)

找到1個僵局。

您的代碼還不錯,還有其他問題,因為異常堆棧從org.eclipse.osgi.framework開始,您的代碼也可以在我這邊正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM