public  interface  Executor  { void  execute ( Runnable  command) ; 
} 
public  interface  ExecutorService  extends  Executor  { void  shutdown ( ) ; List < Runnable > shutdownNow ( ) ; boolean  isShutdown ( ) ; boolean  isTerminated ( ) ; boolean  awaitTermination ( long  timeout,  TimeUnit  unit) throws  InterruptedException ; < T > Future < T > submit ( Callable < T > ) ; < T > Future < T > submit ( Runnable  task,  T  result) ; Future < ? > submit ( Runnable  task) ; < T > List < Future < T > > invokeAll ( Collection < ?  extends  Callable < T > > ) throws  InterruptedException ; < T > List < Future < T > > invokeAll ( Collection < ?  extends  Callable < T > > , long  timeout,  TimeUnit  unit) throws  InterruptedException ; < T > T  invokeAny ( Collection < ?  extends  Callable < T > > ) throws  InterruptedException ,  ExecutionException ; < T > T  invokeAny ( Collection < ?  extends  Callable < T > > , long  timeout,  TimeUnit  unit) throws  InterruptedException ,  ExecutionException ,  TimeoutException ; 
} 
public  abstract  class  AbstractExecutorService  implements  ExecutorService  { protected  < T > RunnableFuture < T > newTaskFor ( Runnable  runnable,  T  value)  { return  new  FutureTask < T > ( runnable,  value) ; } protected  < T > RunnableFuture < T > newTaskFor ( Callable < T > )  { return  new  FutureTask < T > ( callable) ; } public  Future < ? > submit ( Runnable  task)  { if  ( task ==  null )  throw  new  NullPointerException ( ) ; RunnableFuture < Void > =  newTaskFor ( task,  null ) ; execute ( ftask) ; return  ftask; } public  < T > Future < T > submit ( Runnable  task,  T  result)  { if  ( task ==  null )  throw  new  NullPointerException ( ) ; RunnableFuture < T > =  newTaskFor ( task,  result) ; execute ( ftask) ; return  ftask; } public  < T > Future < T > submit ( Callable < T > )  { if  ( task ==  null )  throw  new  NullPointerException ( ) ; RunnableFuture < T > =  newTaskFor ( task) ; execute ( ftask) ; return  ftask; } private  < T > T  doInvokeAny ( Collection < ?  extends  Callable < T > > , boolean  timed,  long  nanos) throws  InterruptedException ,  ExecutionException ,  TimeoutException  { if  ( tasks ==  null ) throw  new  NullPointerException ( ) ; int  ntasks =  tasks. size ( ) ; if  ( ntasks ==  0 ) throw  new  IllegalArgumentException ( ) ; ArrayList < Future < T > > =  new  ArrayList < Future < T > > ( ntasks) ; ExecutorCompletionService < T > = new  ExecutorCompletionService < T > ( this ) ; try  { ExecutionException  ee =  null ; final  long  deadline =  timed ?  System . nanoTime ( )  +  nanos :  0L ; Iterator < ?  extends  Callable < T > > =  tasks. iterator ( ) ; futures. add ( ecs. submit ( it. next ( ) ) ) ; -- ntasks; int  active =  1 ; for  ( ; ; )  { Future < T > =  ecs. poll ( ) ; if  ( f ==  null )  { if  ( ntasks >  0 )  { -- ntasks; futures. add ( ecs. submit ( it. next ( ) ) ) ; ++ active; } else  if  ( active ==  0 ) break ; else  if  ( timed)  { f =  ecs. poll ( nanos,  TimeUnit . NANOSECONDS ) ; if  ( f ==  null ) throw  new  TimeoutException ( ) ; nanos =  deadline -  System . nanoTime ( ) ; } else f =  ecs. take ( ) ; } if  ( f !=  null )  { -- active; try  { return  f. get ( ) ; }  catch  ( ExecutionException  eex)  { ee =  eex; }  catch  ( RuntimeException  rex)  { ee =  new  ExecutionException ( rex) ; } } } if  ( ee ==  null ) ee =  new  ExecutionException ( ) ; throw  ee; }  finally  { for  ( int  i =  0 ,  size =  futures. size ( ) ;  i <  size;  i++ ) futures. get ( i) . cancel ( true ) ; } } public  < T > T  invokeAny ( Collection < ?  extends  Callable < T > > ) throws  InterruptedException ,  ExecutionException  { try  { return  doInvokeAny ( tasks,  false ,  0 ) ; }  catch  ( TimeoutException  cannotHappen)  { assert  false ; return  null ; } } public  < T > T  invokeAny ( Collection < ?  extends  Callable < T > > , long  timeout,  TimeUnit  unit) throws  InterruptedException ,  ExecutionException ,  TimeoutException  { return  doInvokeAny ( tasks,  true ,  unit. toNanos ( timeout) ) ; } public  < T > List < Future < T > > invokeAll ( Collection < ?  extends  Callable < T > > ) throws  InterruptedException  { if  ( tasks ==  null ) throw  new  NullPointerException ( ) ; ArrayList < Future < T > > =  new  ArrayList < Future < T > > ( tasks. size ( ) ) ; boolean  done =  false ; try  { for  ( Callable < T > :  tasks)  { RunnableFuture < T > =  newTaskFor ( t) ; futures. add ( f) ; execute ( f) ; } for  ( int  i =  0 ,  size =  futures. size ( ) ;  i <  size;  i++ )  { Future < T > =  futures. get ( i) ; if  ( ! f. isDone ( ) )  { try  { f. get ( ) ; }  catch  ( CancellationException  ignore)  { }  catch  ( ExecutionException  ignore)  { } } } done =  true ; return  futures; }  finally  { if  ( ! done) for  ( int  i =  0 ,  size =  futures. size ( ) ;  i <  size;  i++ ) futures. get ( i) . cancel ( true ) ; } } public  < T > List < Future < T > > invokeAll ( Collection < ?  extends  Callable < T > > , long  timeout,  TimeUnit  unit) throws  InterruptedException  { if  ( tasks ==  null ) throw  new  NullPointerException ( ) ; long  nanos =  unit. toNanos ( timeout) ; ArrayList < Future < T > > =  new  ArrayList < Future < T > > ( tasks. size ( ) ) ; boolean  done =  false ; try  { for  ( Callable < T > :  tasks) futures. add ( newTaskFor ( t) ) ; final  long  deadline =  System . nanoTime ( )  +  nanos; final  int  size =  futures. size ( ) ; for  ( int  i =  0 ;  i <  size;  i++ )  { execute ( ( Runnable ) futures. get ( i) ) ; nanos =  deadline -  System . nanoTime ( ) ; if  ( nanos <=  0L ) return  futures; } for  ( int  i =  0 ;  i <  size;  i++ )  { Future < T > =  futures. get ( i) ; if  ( ! f. isDone ( ) )  { if  ( nanos <=  0L ) return  futures; try  { f. get ( nanos,  TimeUnit . NANOSECONDS ) ; }  catch  ( CancellationException  ignore)  { }  catch  ( ExecutionException  ignore)  { }  catch  ( TimeoutException  toe)  { return  futures; } nanos =  deadline -  System . nanoTime ( ) ; } } done =  true ; return  futures; }  finally  { if  ( ! done) for  ( int  i =  0 ,  size =  futures. size ( ) ;  i <  size;  i++ ) futures. get ( i) . cancel ( true ) ; } } } 
public  interface  ScheduledExecutorService  extends  ExecutorService  { public  ScheduledFuture < ? > schedule ( Runnable  command, long  delay,  TimeUnit  unit) ; public  < V > ScheduledFuture < V > schedule ( Callable < V > , long  delay,  TimeUnit  unit) ; public  ScheduledFuture < ? > scheduleAtFixedRate ( Runnable  command, long  initialDelay, long  period, TimeUnit  unit) ; public  ScheduledFuture < ? > scheduleWithFixedDelay ( Runnable  command,  long  initialDelay, long  delay, TimeUnit  unit) ; }