17
17
18
18
import java .util .ArrayList ;
19
19
import java .util .Arrays ;
20
- import java .util .Collection ;
21
20
import java .util .List ;
22
21
import java .util .concurrent .atomic .AtomicReference ;
23
22
@@ -34,7 +33,15 @@ public final class CompositeSubscription implements Subscription {
34
33
35
34
private final AtomicReference <State > state = new AtomicReference <State >();
36
35
37
- private static final State CLEAR_STATE = new State (false , new Subscription [0 ]);
36
+ /** Empty initial state. */
37
+ private static final State CLEAR_STATE ;
38
+ /** Unsubscribed empty state. */
39
+ private static final State CLEAR_STATE_UNSUBSCRIBED ;
40
+ static {
41
+ Subscription [] s0 = new Subscription [0 ];
42
+ CLEAR_STATE = new State (false , s0 );
43
+ CLEAR_STATE_UNSUBSCRIBED = new State (true , s0 );
44
+ }
38
45
39
46
private static final class State {
40
47
final boolean isUnsubscribed ;
@@ -46,7 +53,7 @@ private static final class State {
46
53
}
47
54
48
55
State unsubscribe () {
49
- return new State ( true , subscriptions ) ;
56
+ return CLEAR_STATE_UNSUBSCRIBED ;
50
57
}
51
58
52
59
State add (Subscription s ) {
@@ -66,7 +73,7 @@ State remove(Subscription s) {
66
73
}
67
74
68
75
State clear () {
69
- return new State ( isUnsubscribed , new Subscription [ 0 ]) ;
76
+ return isUnsubscribed ? CLEAR_STATE_UNSUBSCRIBED : CLEAR_STATE ;
70
77
}
71
78
}
72
79
@@ -78,6 +85,7 @@ public CompositeSubscription(final Subscription... subscriptions) {
78
85
state .set (new State (false , subscriptions ));
79
86
}
80
87
88
+ @ Override
81
89
public boolean isUnsubscribed () {
82
90
return state .get ().isUnsubscribed ;
83
91
}
0 commit comments