3
3
import java .io .InputStream ;
4
4
import java .io .OutputStream ;
5
5
import java .lang .ref .SoftReference ;
6
+ import java .util .concurrent .atomic .AtomicReference ;
6
7
7
8
import org .apache .avro .io .*;
8
9
@@ -23,8 +24,8 @@ public final class ApacheCodecRecycler
23
24
protected final static ThreadLocal <SoftReference <ApacheCodecRecycler >> _recycler
24
25
= new ThreadLocal <SoftReference <ApacheCodecRecycler >>();
25
26
26
- private BinaryDecoder decoder ;
27
- private BinaryEncoder encoder ;
27
+ private final AtomicReference < BinaryDecoder > decoderRef = new AtomicReference <>() ;
28
+ private final AtomicReference < BinaryEncoder > encoderRef = new AtomicReference <>() ;
28
29
29
30
private ApacheCodecRecycler () { }
30
31
@@ -57,11 +58,11 @@ public static BinaryEncoder encoder(OutputStream out, boolean buffering)
57
58
}
58
59
59
60
public static void release (BinaryDecoder dec ) {
60
- _recycler ().decoder = ( BinaryDecoder ) dec ;
61
+ _recycler ().decoderRef . set ( dec ) ;
61
62
}
62
63
63
64
public static void release (BinaryEncoder enc ) {
64
- _recycler ().encoder = enc ;
65
+ _recycler ().encoderRef . set ( enc ) ;
65
66
}
66
67
67
68
/*
@@ -76,21 +77,17 @@ private static ApacheCodecRecycler _recycler() {
76
77
77
78
if (r == null ) {
78
79
r = new ApacheCodecRecycler ();
79
- _recycler .set (new SoftReference <ApacheCodecRecycler >(r ));
80
+ _recycler .set (new SoftReference <>(r ));
80
81
}
81
82
return r ;
82
83
}
83
84
84
85
private BinaryDecoder claimDecoder () {
85
- BinaryDecoder d = decoder ;
86
- decoder = null ;
87
- return d ;
86
+ return decoderRef .getAndSet (null );
88
87
}
89
88
90
89
private BinaryEncoder claimEncoder () {
91
- BinaryEncoder e = encoder ;
92
- encoder = null ;
93
- return e ;
90
+ return encoderRef .getAndSet (null );
94
91
}
95
92
96
93
/*
0 commit comments