WEB开发网
开发学院软件开发Java CXF client在并发下的线程安全问题 阅读

CXF client在并发下的线程安全问题

 2009-09-24 00:00:00 来源:WEB开发网   
核心提示: 看来问题是出现在这里了,进一步的测试发现,CXF client在并发下的线程安全问题(3),低压力下比如2-3个工作线程,基本不会有任何问题,看来问题出现在这里,试着将代码修改为threadlocal,因此可以解释为什么功能测试时不出现问题,工作线程加到10个

看来问题是出现在这里了。

进一步的测试发现,低压力下比如2-3个工作线程,基本不会有任何问题,因此可以解释为什么功能测试时不出现问题。工作线程加到10个,基本上还算问题,只有极其偶然的会出现一次两次这个异常。进一步加大工作线程,由于受到测试机器的性能限制,10个工作线程和100个工作线程的tps基本相同,都大体在 300TPS左右(客户端在笔记本上跑的,cpu已经90%+了)。测试的结果是上面的异常开始变的有规律,恩,非常搞笑的规律,大概每10000次左右的请求就发生一次上述异常,非常的稳定而执着的重现。服了,这么有规律而重现性极好的错误,还真是难得一见........

分析一下问题,在tps基本保持不变的情况下,客户端线程从10增加到100问题就变得明显。因此问题的焦点直指线程安全这个老大难问题,重新审视我们使用cxf的代码,发现有个地方

    /**
     * the server service
     */
    MessagingChannelServiceImplService mcsis = null;
    /**
     * the sever service port
     */
    MessagingChannelService mcs = null;

            mcsis = new MessagingChannelServiceImplService(serviceWsdlUrl);
            mcs = mcsis.getMessagingChannelServiceImplPort();

MessagingChannelService是cxf自动生成的,这个是@WebService,其他的业务代码都是调用它上面的业务方法来实现。由于serviceWsdlUrl不变,因此我们重用了一些东西,避免每次都初始化一次。看来问题出现在这里,试着将代码修改为threadlocal,让每个线程都初始化一次然后保存给自己使用。

上一页  1 2 3 4 5  下一页

Tags:CXF client 并发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接