关于多线程并发的一个问题记录
今天线上排查问题时,突然遇到一个怪异的问题,ForkJoinTask报空指针。怀着好奇的心,便探索了下。
问题:
java.lang.NullPointerException: null
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:603)
at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:678)
at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:737)
at java.base/java.util.stream.Nodes.collect(Nodes.java:333)
at java.base/java.util.stream.ReferencePipeline.evaluateToNode(ReferencePipeline.java:109)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:545)
at java.base/java.util.stream.SortedOps$OfRef.opEvaluateParallel(SortedOps.java:157)
at java.base/java.util.stream.AbstractPipeline.opEvaluateParallelLazy(AbstractPipeline.java:710)
at java.base/java.util.stream.AbstractPipeline.sourceSpliterator(AbstractPipeline.java:434)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at com.xxx.ProductController.list(ProductController.java:484)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at jdk.internal.reflect.GeneratedMethodAccessor1180.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:891)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797