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

#ifndef __java_util_concurrent_Executors__
#define __java_util_concurrent_Executors__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace security
    {
        class PrivilegedAction;
        class PrivilegedExceptionAction;
    }
  }
}

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

public:
  static ::java::util::concurrent::ExecutorService * newFixedThreadPool(jint);
  static ::java::util::concurrent::ExecutorService * newFixedThreadPool(jint, ::java::util::concurrent::ThreadFactory *);
  static ::java::util::concurrent::ExecutorService * newSingleThreadExecutor();
  static ::java::util::concurrent::ExecutorService * newSingleThreadExecutor(::java::util::concurrent::ThreadFactory *);
  static ::java::util::concurrent::ExecutorService * newCachedThreadPool();
  static ::java::util::concurrent::ExecutorService * newCachedThreadPool(::java::util::concurrent::ThreadFactory *);
  static ::java::util::concurrent::ScheduledExecutorService * newSingleThreadScheduledExecutor();
  static ::java::util::concurrent::ScheduledExecutorService * newSingleThreadScheduledExecutor(::java::util::concurrent::ThreadFactory *);
  static ::java::util::concurrent::ScheduledExecutorService * newScheduledThreadPool(jint);
  static ::java::util::concurrent::ScheduledExecutorService * newScheduledThreadPool(jint, ::java::util::concurrent::ThreadFactory *);
  static ::java::util::concurrent::ExecutorService * unconfigurableExecutorService(::java::util::concurrent::ExecutorService *);
  static ::java::util::concurrent::ScheduledExecutorService * unconfigurableScheduledExecutorService(::java::util::concurrent::ScheduledExecutorService *);
  static ::java::util::concurrent::ThreadFactory * defaultThreadFactory();
  static ::java::util::concurrent::ThreadFactory * privilegedThreadFactory();
  static ::java::util::concurrent::Callable * callable(::java::lang::Runnable *, ::java::lang::Object *);
  static ::java::util::concurrent::Callable * callable(::java::lang::Runnable *);
  static ::java::util::concurrent::Callable * callable(::java::security::PrivilegedAction *);
  static ::java::util::concurrent::Callable * callable(::java::security::PrivilegedExceptionAction *);
  static ::java::util::concurrent::Callable * privilegedCallable(::java::util::concurrent::Callable *);
  static ::java::util::concurrent::Callable * privilegedCallableUsingCurrentClassLoader(::java::util::concurrent::Callable *);
private:
  Executors();
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_concurrent_Executors__
