昨天晚上一直在调试一个奇怪的问题。该问题就大流量的状况下就会出现。java
(注:之后凡是奇怪的问题,并且是性能测试出现的,先往多线程这儿走)安全
用一个小片断的代码来讲明这个问题:服务器
public class TestComponent implements org.xmpp.component.Component{ private TestService service = new TestService(); ........ public void processPacket(Packet packet) { TestObject = service.handle(packet); ........ } ........ }
而后咱们用whack下面的ExternalComponentManager来包装这个component并链接到openfire服务器上。多线程
若是打开ExternalComponentManager的源码就会发现,这个component的工做模式和java servlet相似。性能
一个component的实例的processPacket会在一个线程池中被调用。若是TestService是一个非线程安全的类的话,确定会出问题。测试
之后再碰到相似模式的java class,发现里面定义了成员变量,先问问为何要定义这些成员?他们线程安全吗?线程
写到这儿,就回忆起,这种问题其实碰到过好屡次了。再提醒一下本身把。调试