@@ -109,18 +109,6 @@ protected boolean remove(long n) {
109
109
}
110
110
}
111
111
112
- private static class MasterCleanerImpl extends CleanerImpl {
113
- @ Override
114
- protected synchronized void put (long n , CleanerRef ref ) {
115
- super .put (n , ref );
116
- }
117
-
118
- @ Override
119
- protected synchronized boolean remove (long n ) {
120
- return super .remove (n );
121
- }
122
- }
123
-
124
112
static class MasterCleaner extends Cleaner {
125
113
static MasterCleaner INSTANCE ;
126
114
@@ -130,33 +118,25 @@ public static synchronized void add(Cleaner cleaner) {
130
118
}
131
119
final CleanerImpl impl = cleaner .impl ;
132
120
INSTANCE .cleanerImpls .put (impl , true );
133
- INSTANCE .register (cleaner , new Runnable () {
134
- @ Override
135
- public void run () {
136
- INSTANCE .cleanerImpls .put (impl , false );
137
- }
138
- });
121
+ INSTANCE .register (cleaner , () -> INSTANCE .cleanerImpls .put (impl , false ));
139
122
}
140
123
141
- private static synchronized boolean deleteIfEmpty () {
142
- if (INSTANCE != null && INSTANCE .cleanerImpls .isEmpty ()) {
124
+ private static synchronized boolean deleteIfEmpty (MasterCleaner caller ) {
125
+ if (INSTANCE == caller && INSTANCE .cleanerImpls .isEmpty ()) {
143
126
INSTANCE = null ;
144
- return true ;
145
127
}
146
- return false ;
128
+ return caller . cleanerImpls . isEmpty () ;
147
129
}
148
130
149
131
final Map <CleanerImpl ,Boolean > cleanerImpls = new ConcurrentHashMap <CleanerImpl ,Boolean >();
150
132
private long lastNonEmpty = System .currentTimeMillis ();
151
133
152
134
private MasterCleaner () {
153
135
super (true );
154
- Thread cleanerThread = new Thread () {
155
- @ Override
156
- public void run () {
136
+ Thread cleanerThread = new Thread (() -> {
157
137
long now ;
158
138
long lastMasterRun = 0 ;
159
- while ((now = System .currentTimeMillis ()) < lastNonEmpty + MASTER_MAX_LINGER_MS || !deleteIfEmpty ()) {
139
+ while ((now = System .currentTimeMillis ()) < lastNonEmpty + MASTER_MAX_LINGER_MS || !deleteIfEmpty (MasterCleaner . this )) {
160
140
if (!cleanerImpls .isEmpty ()) { lastNonEmpty = now ; }
161
141
try {
162
142
Reference <?> ref = impl .referenceQueue .remove (MASTER_CLEANUP_INTERVAL_MS );
@@ -178,9 +158,7 @@ public void run() {
178
158
Logger .getLogger (Cleaner .class .getName ()).log (Level .SEVERE , null , ex );
179
159
}
180
160
}
181
- }
182
- };
183
- cleanerThread .setName ("JNA Cleaner" );
161
+ }, "JNA Cleaner" );
184
162
cleanerThread .setDaemon (true );
185
163
cleanerThread .start ();
186
164
}
@@ -197,12 +175,7 @@ private void masterCleanup() {
197
175
}
198
176
}
199
177
200
- private static final ThreadLocal <Cleaner > MY_INSTANCE = new ThreadLocal <Cleaner >() {
201
- @ Override
202
- protected Cleaner initialValue () {
203
- return new Cleaner (false );
204
- }
205
- };
178
+ private static final ThreadLocal <Cleaner > MY_INSTANCE = ThreadLocal .withInitial (() -> new Cleaner (false ));
206
179
207
180
public static Cleaner getCleaner () {
208
181
return MY_INSTANCE .get ();
@@ -211,10 +184,8 @@ public static Cleaner getCleaner() {
211
184
protected final CleanerImpl impl ;
212
185
213
186
private Cleaner (boolean master ) {
214
- if (master ) {
215
- impl = new MasterCleanerImpl ();
216
- } else {
217
- impl = new CleanerImpl ();
187
+ impl = new CleanerImpl ();
188
+ if (!master ) {
218
189
MasterCleaner .add (this );
219
190
}
220
191
}
@@ -246,7 +217,7 @@ public void clean() {
246
217
}
247
218
}
248
219
249
- public static interface Cleanable {
250
- public void clean ();
220
+ public interface Cleanable {
221
+ void clean ();
251
222
}
252
223
}
0 commit comments