1
1
package com .github .davidmoten .rx .subjects ;
2
2
3
- import java .util .concurrent .atomic .AtomicReferenceFieldUpdater ;
3
+ import java .util .concurrent .atomic .AtomicReference ;
4
4
5
5
import rx .Subscriber ;
6
6
import rx .subjects .Subject ;
@@ -42,44 +42,38 @@ public static <T> PublishSubjectSingleSubscriber<T> create() {
42
42
43
43
@ Override
44
44
public void onCompleted () {
45
- if (subscriberHolder .subscriber != null ) {
46
- subscriberHolder .subscriber .onCompleted ();
45
+ if (subscriberHolder .subscriber . get () != null ) {
46
+ subscriberHolder .subscriber .get (). onCompleted ();
47
47
}
48
48
}
49
49
50
50
@ Override
51
51
public void onError (Throwable e ) {
52
- if (subscriberHolder .subscriber != null )
53
- subscriberHolder .subscriber .onError (e );
52
+ if (subscriberHolder .subscriber . get () != null )
53
+ subscriberHolder .subscriber .get (). onError (e );
54
54
}
55
55
56
56
@ Override
57
57
public void onNext (T t ) {
58
- if (subscriberHolder .subscriber != null )
59
- subscriberHolder .subscriber .onNext (t );
58
+ if (subscriberHolder .subscriber . get () != null )
59
+ subscriberHolder .subscriber .get (). onNext (t );
60
60
}
61
61
62
62
private static class SingleSubscribeOnSubscribe <T > implements OnSubscribe <T > {
63
63
64
- volatile Subscriber <? super T > subscriber ;
65
-
66
- @ SuppressWarnings ("rawtypes" )
67
- private final AtomicReferenceFieldUpdater <SingleSubscribeOnSubscribe , Subscriber > SUBSCRIBER = AtomicReferenceFieldUpdater
68
- .newUpdater (SingleSubscribeOnSubscribe .class , Subscriber .class , "subscriber" );
64
+ final AtomicReference <Subscriber <? super T >> subscriber = new AtomicReference <Subscriber <? super T >>();
69
65
70
66
@ Override
71
- public void call (Subscriber <? super T > subscriber ) {
72
- if (SUBSCRIBER .compareAndSet (this , null , subscriber ))
73
- this .subscriber = subscriber ;
74
- else
67
+ public void call (Subscriber <? super T > sub ) {
68
+ if (!subscriber .compareAndSet (null , sub ))
75
69
throw new RuntimeException (ONLY_ONE_SUBSCRIPTION_IS_ALLOWED );
76
70
}
77
71
78
72
}
79
73
80
74
@ Override
81
75
public boolean hasObservers () {
82
- return subscriberHolder .subscriber != null ;
76
+ return subscriberHolder .subscriber . get () != null ;
83
77
}
84
78
85
79
}
0 commit comments