64
64
import java .security .cert .X509Certificate ;
65
65
import java .util .Arrays ;
66
66
import java .util .Collections ;
67
- import java .util .Iterator ;
68
67
import java .util .LinkedList ;
69
68
import java .util .List ;
70
69
import java .util .concurrent .Callable ;
70
+ import java .util .concurrent .CopyOnWriteArrayList ;
71
71
import java .util .concurrent .CountDownLatch ;
72
72
import java .util .concurrent .ExecutorService ;
73
73
import java .util .concurrent .Executors ;
@@ -136,8 +136,8 @@ public X509Certificate[] getAcceptedIssuers() {
136
136
137
137
private EventDeserializer eventDeserializer = new EventDeserializer ();
138
138
139
- private final List <EventListener > eventListeners = new LinkedList <EventListener >();
140
- private final List <LifecycleListener > lifecycleListeners = new LinkedList <LifecycleListener >();
139
+ private final List <EventListener > eventListeners = new CopyOnWriteArrayList <EventListener >();
140
+ private final List <LifecycleListener > lifecycleListeners = new CopyOnWriteArrayList <LifecycleListener >();
141
141
142
142
private SocketFactory socketFactory ;
143
143
private SSLSocketFactory sslSocketFactory ;
@@ -542,10 +542,8 @@ public void connect() throws IOException {
542
542
logger .info ("Connected to " + hostname + ":" + port + " at " + position +
543
543
" (" + (blocking ? "sid:" + serverId + ", " : "" ) + "cid:" + connectionId + ")" );
544
544
}
545
- synchronized (lifecycleListeners ) {
546
- for (LifecycleListener lifecycleListener : lifecycleListeners ) {
547
- lifecycleListener .onConnect (this );
548
- }
545
+ for (LifecycleListener lifecycleListener : lifecycleListeners ) {
546
+ lifecycleListener .onConnect (this );
549
547
}
550
548
if (keepAlive && !isKeepAliveThreadRunning ()) {
551
549
spawnKeepAliveThread ();
@@ -560,10 +558,8 @@ public void connect() throws IOException {
560
558
} finally {
561
559
connectLock .unlock ();
562
560
if (notifyWhenDisconnected ) {
563
- synchronized (lifecycleListeners ) {
564
- for (LifecycleListener lifecycleListener : lifecycleListeners ) {
565
- lifecycleListener .onDisconnect (this );
566
- }
561
+ for (LifecycleListener lifecycleListener : lifecycleListeners ) {
562
+ lifecycleListener .onDisconnect (this );
567
563
}
568
564
}
569
565
}
@@ -899,10 +895,8 @@ private void listenForEventPackets() throws IOException {
899
895
throw e ;
900
896
}
901
897
if (isConnected ()) {
902
- synchronized (lifecycleListeners ) {
903
- for (LifecycleListener lifecycleListener : lifecycleListeners ) {
904
- lifecycleListener .onEventDeserializationFailure (this , e );
905
- }
898
+ for (LifecycleListener lifecycleListener : lifecycleListeners ) {
899
+ lifecycleListener .onEventDeserializationFailure (this , e );
906
900
}
907
901
}
908
902
continue ;
@@ -916,10 +910,8 @@ private void listenForEventPackets() throws IOException {
916
910
}
917
911
} catch (Exception e ) {
918
912
if (isConnected ()) {
919
- synchronized (lifecycleListeners ) {
920
- for (LifecycleListener lifecycleListener : lifecycleListeners ) {
921
- lifecycleListener .onCommunicationFailure (this , e );
922
- }
913
+ for (LifecycleListener lifecycleListener : lifecycleListeners ) {
914
+ lifecycleListener .onCommunicationFailure (this , e );
923
915
}
924
916
}
925
917
} finally {
@@ -1016,22 +1008,16 @@ public List<EventListener> getEventListeners() {
1016
1008
* where registered.
1017
1009
*/
1018
1010
public void registerEventListener (EventListener eventListener ) {
1019
- synchronized (eventListeners ) {
1020
- eventListeners .add (eventListener );
1021
- }
1011
+ eventListeners .add (eventListener );
1022
1012
}
1023
1013
1024
1014
/**
1025
1015
* Unregister all event listener of specific type.
1026
1016
*/
1027
1017
public void unregisterEventListener (Class <? extends EventListener > listenerClass ) {
1028
- synchronized (eventListeners ) {
1029
- Iterator <EventListener > iterator = eventListeners .iterator ();
1030
- while (iterator .hasNext ()) {
1031
- EventListener eventListener = iterator .next ();
1032
- if (listenerClass .isInstance (eventListener )) {
1033
- iterator .remove ();
1034
- }
1018
+ for (EventListener eventListener : eventListeners ) {
1019
+ if (listenerClass .isInstance (eventListener )) {
1020
+ eventListeners .remove (eventListener );
1035
1021
}
1036
1022
}
1037
1023
}
@@ -1040,23 +1026,19 @@ public void unregisterEventListener(Class<? extends EventListener> listenerClass
1040
1026
* Unregister single event listener.
1041
1027
*/
1042
1028
public void unregisterEventListener (EventListener eventListener ) {
1043
- synchronized (eventListeners ) {
1044
- eventListeners .remove (eventListener );
1045
- }
1029
+ eventListeners .remove (eventListener );
1046
1030
}
1047
1031
1048
1032
private void notifyEventListeners (Event event ) {
1049
1033
if (event .getData () instanceof EventDeserializer .EventDataWrapper ) {
1050
1034
event = new Event (event .getHeader (), ((EventDeserializer .EventDataWrapper ) event .getData ()).getExternal ());
1051
1035
}
1052
- synchronized (eventListeners ) {
1053
- for (EventListener eventListener : eventListeners ) {
1054
- try {
1055
- eventListener .onEvent (event );
1056
- } catch (Exception e ) {
1057
- if (logger .isLoggable (Level .WARNING )) {
1058
- logger .log (Level .WARNING , eventListener + " choked on " + event , e );
1059
- }
1036
+ for (EventListener eventListener : eventListeners ) {
1037
+ try {
1038
+ eventListener .onEvent (event );
1039
+ } catch (Exception e ) {
1040
+ if (logger .isLoggable (Level .WARNING )) {
1041
+ logger .log (Level .WARNING , eventListener + " choked on " + event , e );
1060
1042
}
1061
1043
}
1062
1044
}
@@ -1074,22 +1056,16 @@ public List<LifecycleListener> getLifecycleListeners() {
1074
1056
* where registered.
1075
1057
*/
1076
1058
public void registerLifecycleListener (LifecycleListener lifecycleListener ) {
1077
- synchronized (lifecycleListeners ) {
1078
- lifecycleListeners .add (lifecycleListener );
1079
- }
1059
+ lifecycleListeners .add (lifecycleListener );
1080
1060
}
1081
1061
1082
1062
/**
1083
1063
* Unregister all lifecycle listener of specific type.
1084
1064
*/
1085
1065
public void unregisterLifecycleListener (Class <? extends LifecycleListener > listenerClass ) {
1086
- synchronized (lifecycleListeners ) {
1087
- Iterator <LifecycleListener > iterator = lifecycleListeners .iterator ();
1088
- while (iterator .hasNext ()) {
1089
- LifecycleListener lifecycleListener = iterator .next ();
1090
- if (listenerClass .isInstance (lifecycleListener )) {
1091
- iterator .remove ();
1092
- }
1066
+ for (LifecycleListener lifecycleListener : lifecycleListeners ) {
1067
+ if (listenerClass .isInstance (lifecycleListener )) {
1068
+ lifecycleListeners .remove (lifecycleListener );
1093
1069
}
1094
1070
}
1095
1071
}
@@ -1098,9 +1074,7 @@ public void unregisterLifecycleListener(Class<? extends LifecycleListener> liste
1098
1074
* Unregister single lifecycle listener.
1099
1075
*/
1100
1076
public void unregisterLifecycleListener (LifecycleListener eventListener ) {
1101
- synchronized (lifecycleListeners ) {
1102
- lifecycleListeners .remove (eventListener );
1103
- }
1077
+ lifecycleListeners .remove (eventListener );
1104
1078
}
1105
1079
1106
1080
/**
0 commit comments