昨天晚上一直在調試一個奇怪的問題。該問題就大流量的狀況下就會出現。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,發現裏面定義了成員變量,先問問爲何要定義這些成員?他們線程安全嗎?線程
寫到這兒,就回憶起,這種問題其實碰到過好屢次了。再提醒一下本身把。調試