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

#ifndef __java_util_concurrent_FutureTask__
#define __java_util_concurrent_FutureTask__

#pragma interface

#include <java/lang/Object.h>

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

public:
  FutureTask(::java::util::concurrent::Callable *);
  FutureTask(::java::lang::Runnable *, ::java::lang::Object *);
  virtual jboolean isCancelled();
  virtual jboolean isDone();
  virtual jboolean cancel(jboolean);
  virtual ::java::lang::Object * get();
  virtual ::java::lang::Object * get(jlong, ::java::util::concurrent::TimeUnit *);
public: // actually protected
  virtual void done();
  virtual void set(::java::lang::Object *);
  virtual void setException(::java::lang::Throwable *);
public:
  virtual void run();
public: // actually protected
  virtual jboolean runAndReset();
private:
  ::java::util::concurrent::FutureTask$Sync * __attribute__((aligned(__alignof__( ::java::lang::Object)))) sync;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_concurrent_FutureTask__
