import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
-import java.util.Iterator;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
}
public void addProcessListener(final ProcessListener listener) {
- synchronized(myListeners) {
- myListeners.add(listener);
- }
+ myListeners.add(listener);
}
public void removeProcessListener(final ProcessListener listener) {
- synchronized(myListeners) {
- myListeners.remove(listener);
- }
+ myListeners.remove(listener);
}
protected void notifyProcessDetached() {
runnable.run();
}
});
+ assert !isStartNotified();
}
}
final Class<ProcessListener> listenerClass = ProcessListener.class;
return (ProcessListener)Proxy.newProxyInstance(listenerClass.getClassLoader(), new Class[] {listenerClass}, new InvocationHandler() {
public Object invoke(Object object, Method method, Object[] params) throws Throwable {
- final Iterator<ProcessListener> iterator;
- synchronized (myListeners) {
- iterator = myListeners.iterator();
- }
- while (iterator.hasNext()) {
- final ProcessListener processListener = iterator.next();
+ for (ProcessListener listener : myListeners) {
try {
- method.invoke(processListener, params);
+ method.invoke(listener, params);
}
catch (Throwable e) {
LOG.error(e);
}
}
- for (String s : toUpdate.keySet()) {
- myState.put(s, toUpdate.get(s));
+ for (Map.Entry<String, UsersData> entry : toUpdate.entrySet()) {
+ myState.put(entry.getKey(), entry.getValue());
}
if (! toUpdate.isEmpty()) {
myState.force();