@@ -109,18 +109,6 @@ protected boolean remove(long n) {
109109 }
110110 }
111111
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-
124112 static class MasterCleaner extends Cleaner {
125113 static MasterCleaner INSTANCE ;
126114
@@ -130,33 +118,25 @@ public static synchronized void add(Cleaner cleaner) {
130118 }
131119 final CleanerImpl impl = cleaner .impl ;
132120 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 ));
139122 }
140123
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 ()) {
143126 INSTANCE = null ;
144- return true ;
145127 }
146- return false ;
128+ return caller . cleanerImpls . isEmpty () ;
147129 }
148130
149131 final Map <CleanerImpl ,Boolean > cleanerImpls = new ConcurrentHashMap <CleanerImpl ,Boolean >();
150132 private long lastNonEmpty = System .currentTimeMillis ();
151133
152134 private MasterCleaner () {
153135 super (true );
154- Thread cleanerThread = new Thread () {
155- @ Override
156- public void run () {
136+ Thread cleanerThread = new Thread (() -> {
157137 long now ;
158138 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 )) {
160140 if (!cleanerImpls .isEmpty ()) { lastNonEmpty = now ; }
161141 try {
162142 Reference <?> ref = impl .referenceQueue .remove (MASTER_CLEANUP_INTERVAL_MS );
@@ -178,9 +158,7 @@ public void run() {
178158 Logger .getLogger (Cleaner .class .getName ()).log (Level .SEVERE , null , ex );
179159 }
180160 }
181- }
182- };
183- cleanerThread .setName ("JNA Cleaner" );
161+ }, "JNA Cleaner" );
184162 cleanerThread .setDaemon (true );
185163 cleanerThread .start ();
186164 }
@@ -197,12 +175,7 @@ private void masterCleanup() {
197175 }
198176 }
199177
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 ));
206179
207180 public static Cleaner getCleaner () {
208181 return MY_INSTANCE .get ();
@@ -211,10 +184,8 @@ public static Cleaner getCleaner() {
211184 protected final CleanerImpl impl ;
212185
213186 private Cleaner (boolean master ) {
214- if (master ) {
215- impl = new MasterCleanerImpl ();
216- } else {
217- impl = new CleanerImpl ();
187+ impl = new CleanerImpl ();
188+ if (!master ) {
218189 MasterCleaner .add (this );
219190 }
220191 }
@@ -246,7 +217,7 @@ public void clean() {
246217 }
247218 }
248219
249- public static interface Cleanable {
250- public void clean ();
220+ public interface Cleanable {
221+ void clean ();
251222 }
252223}
0 commit comments