Skip to content

Commit 1d086fe

Browse files
committed
Simplification
1 parent 16975a3 commit 1d086fe

File tree

1 file changed

+12
-41
lines changed

1 file changed

+12
-41
lines changed

src/com/sun/jna/internal/Cleaner.java

Lines changed: 12 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)