307 public void clear() { 308 throw new UnsupportedOperationException("clear"); 309 } 310 311 } 312 313 /** 314 * A ThreadFactory for InnocuousThreads. 315 * The factory is a singleton. 316 */ 317 static final class InnocuousThreadFactory implements ThreadFactory { 318 final static ThreadFactory factory = new InnocuousThreadFactory(); 319 320 static ThreadFactory factory() { 321 return factory; 322 } 323 324 final AtomicInteger cleanerThreadNumber = new AtomicInteger(); 325 326 public Thread newThread(Runnable r) { 327 return AccessController.doPrivileged(new PrivilegedAction<Thread>() { 328 @Override 329 public Thread run() { 330 Thread t = new InnocuousThread(r); 331 t.setPriority(Thread.MAX_PRIORITY - 2); 332 t.setName("Cleaner-" + cleanerThreadNumber.getAndIncrement()); 333 return t; 334 } 335 }); 336 } 337 } 338 339 /** 340 * A PhantomCleanable implementation for tracking the Cleaner itself. 341 */ 342 static final class CleanerCleanable extends PhantomCleanable<Cleaner> { 343 CleanerCleanable(Cleaner cleaner) { 344 super(cleaner, cleaner); 345 } 346 347 @Override 348 protected void performCleanup() { 349 // no action 350 } | 307 public void clear() { 308 throw new UnsupportedOperationException("clear"); 309 } 310 311 } 312 313 /** 314 * A ThreadFactory for InnocuousThreads. 315 * The factory is a singleton. 316 */ 317 static final class InnocuousThreadFactory implements ThreadFactory { 318 final static ThreadFactory factory = new InnocuousThreadFactory(); 319 320 static ThreadFactory factory() { 321 return factory; 322 } 323 324 final AtomicInteger cleanerThreadNumber = new AtomicInteger(); 325 326 public Thread newThread(Runnable r) { 327 return AccessController.doPrivileged(new PrivilegedAction<>() { 328 @Override 329 public Thread run() { 330 Thread t = InnocuousThread.newThread(r); 331 t.setPriority(Thread.MAX_PRIORITY - 2); 332 t.setName("Cleaner-" + cleanerThreadNumber.getAndIncrement()); 333 return t; 334 } 335 }); 336 } 337 } 338 339 /** 340 * A PhantomCleanable implementation for tracking the Cleaner itself. 341 */ 342 static final class CleanerCleanable extends PhantomCleanable<Cleaner> { 343 CleanerCleanable(Cleaner cleaner) { 344 super(cleaner, cleaner); 345 } 346 347 @Override 348 protected void performCleanup() { 349 // no action 350 } |