
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_util_concurrent_AbstractExecutorService__
#define __java_util_concurrent_AbstractExecutorService__

#pragma interface

#include <java/lang/Object.h>

class java::util::concurrent::AbstractExecutorService : public ::java::lang::Object
{

public:
  AbstractExecutorService();
public: // actually protected
  virtual ::java::util::concurrent::RunnableFuture * newTaskFor(::java::lang::Runnable *, ::java::lang::Object *);
  virtual ::java::util::concurrent::RunnableFuture * newTaskFor(::java::util::concurrent::Callable *);
public:
  virtual ::java::util::concurrent::Future * submit(::java::lang::Runnable *);
  virtual ::java::util::concurrent::Future * submit(::java::lang::Runnable *, ::java::lang::Object *);
  virtual ::java::util::concurrent::Future * submit(::java::util::concurrent::Callable *);
private:
  ::java::lang::Object * doInvokeAny(::java::util::Collection *, jboolean, jlong);
public:
  virtual ::java::lang::Object * invokeAny(::java::util::Collection *);
  virtual ::java::lang::Object * invokeAny(::java::util::Collection *, jlong, ::java::util::concurrent::TimeUnit *);
  virtual ::java::util::List * invokeAll(::java::util::Collection *);
  virtual ::java::util::List * invokeAll(::java::util::Collection *, jlong, ::java::util::concurrent::TimeUnit *);
  virtual void shutdown() = 0;
  virtual ::java::util::List * shutdownNow() = 0;
  virtual jboolean isShutdown() = 0;
  virtual jboolean isTerminated() = 0;
  virtual jboolean awaitTermination(jlong, ::java::util::concurrent::TimeUnit *) = 0;
  virtual void execute(::java::lang::Runnable *) = 0;
public: // actually package-private
  static jboolean $assertionsDisabled;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_concurrent_AbstractExecutorService__
