1 6 21 22 package de.schlichtherle.io; 23 24 29 final class JSE5Executor implements File.Executor { 30 private final java.util.concurrent.ExecutorService service; 31 32 36 public JSE5Executor(final String threadName) { 37 assert threadName != null; 38 service = java.util.concurrent.Executors.newCachedThreadPool( 39 new java.util.concurrent.ThreadFactory () { 40 public Thread newThread(final Runnable r) { 41 final Thread t = new Thread (r, threadName); 42 t.setDaemon(true); 43 return t; 44 } 45 }); 46 } 47 48 public File.Task submit(Runnable target) { 49 assert target != null; 50 return new JSE5Task(service.submit(target)); 51 } 52 53 private static final class JSE5Task implements File.Task { 54 private final java.util.concurrent.Future future; 55 56 private JSE5Task(java.util.concurrent.Future future) { 57 assert future != null; 58 this.future = future; 59 } 60 61 public void cancel() { 62 future.cancel(true); 63 while (true) { 64 try { 65 future.get(); 66 break; 67 } catch (java.util.concurrent.CancellationException cancelled) { 68 break; 69 } catch (java.util.concurrent.ExecutionException readerFailure) { 70 assert false : readerFailure; 71 break; 72 } catch (InterruptedException ignored) { 73 } 74 } 75 } 76 } 77 } 78 | Popular Tags |