已经在spring-boot中编写了一个Java进程,该进程使用fork-join池。
进程有时运行良好并且成功完成,有时会无限期挂起,而使用很高的CPU仍然无法完成任务。
线程转储仅显示以下三种类型的工作的可运行状态:
1. java.lang.Thread.State: RUNNABLE
at java.util.WeakHashMap.put(WeakHashMap.java:453)
at java.util.Collections$SetFromMap.add(Collections.java:5461)
at org.apache.cxf.jaxrs.client.spec.ClientImpl$WebTargetImpl.initTargetClientIfNeeded(ClientImpl.java:358)
at org.apache.cxf.jaxrs.client.spec.ClientImpl$WebTargetImpl.request(ClientImpl.java:260)
at org.apache.cxf.jaxrs.client.spec.ClientImpl$WebTargetImpl.request(ClientImpl.java:366)
2. "C2 CompilerThread2" #30 daemon prio=9 os_prio=0 tid=0x00007ff9b0979000 nid=0x250be waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
3."GC task thread#12 (ParallelGC)" os_prio=0 tid=0x00007ff9b0034800 nid=0x24f94 runnable
进一步尝试调试问题,我输入的内容很少::
我正在使用org.apache.cxf.jaxrs.client,当分析发现ClientImpl的initTargetClientIfNeeded方法正在使用2个属性thread.safe.client和thread.safe.client.state.cleanup.period。我是否需要定义这两个属性以使其线程安全?