那我要想问个问题,下面的代码:
public class QueueThread extends Thread {
private static Logger logger = Logger.getLogger(QueueThread.class.getName());
private PacketQueue packetQueue;
private HashMap packetListeners = new HashMap();
public QueueThread(PacketQueue queue) { packetQueue = queue; }
public boolean addListener(PacketListener listener, String element){
if (listener == null || element == null){
return false;
}
packetListeners.put(listener,element);
return true;
}
public boolean removeListener(PacketListener listener){
packetListeners.remove(listener);
return true;
}
public void run(){
for( Packet packet = packetQueue.pull();
packet != null;
packet = packetQueue.pull()) {
logger.finest("Get One Packet:" + packet);
try {
Packet child;
String matchString;
if (packet.getElement().equals("iq")){
child = packet.getFirstChild("query");
if (child == null){
matchString = "iq";
} else {
matchString = child.getNamespace();
}
} else {
matchString = packet.getElement();
}
synchronized(packetListeners){
Iterator iter = packetListeners.keySet().iterator();
while (iter.hasNext()){
PacketListener listener = (PacketListener)iter.next();
String listenerString = (String)packetListeners.get(listener);
if (listenerString.equals(matchString)){
listener.notify(packet);
}
}
}
} catch (Exception ex){
//Log.error("QueueThread: ", ex); // Soldier on - no matter what
}
}
}
}
一旦任意线程进入
synchronized(packetListeners){
Iterator iter = packetListeners.keySet().iterator();
while (iter.hasNext()){
PacketListener listener = (PacketListener)iter.next();
String listenerString = (String)packetListeners.get(listener);
if (listenerString.equals(matchString)){
listener.notify(packet);
}
}
}
代码块,则别的线程调用函数
public boolean addListener(PacketListener listener, String element){
if (listener == null || element == null){
return false;
}
packetListeners.put(listener,element);
return true;
}
执行到packetListeners.put(listener,element);
处一定是阻塞状态对不?