自定义Future对象

时间:2015-06-21 13:21:07

标签: java multithreading concurrency threadpool

我想创建自定义Future对象。

以下代码可以正常使用

ThreadPoolExecutor mExecutor;
Future<?> f = mExecutor.submit(new DownloadRunnable(task, itemId));

我想获取submit的返回值,并将其分配给MyFuture对象,并附加调用。 我做了以下更改,并获得了演员异常......有什么建议吗?

ThreadPoolExecutor mExecutor;
// cast exception
MyFuture<?> f = (MyFuture<?>) mExecutor.submit(new DownloadRunnable(task, itemId));
f.setVer(true);


public class MyFuture<?> implements Future<?> {
    Boolean myVar;

    public void setVar(Boolean v) {
        ...
    }
}

2 个答案:

答案 0 :(得分:2)

您可以通过传递Future<?>

来制作构造函数
 public class MyFuture<?> extends Future<?> 
{
      Boolean myVar;
      Future<?> fut;
      MyFuture<?>(Future<?> fut)
      {
           this.fut = fut;
      }

      public void setVar(Boolean v) 
      {
          ...
      }
}

以下一行

  MyFuture<?> f = (MyFuture<?>) mExecutor.submit(new DownloadRunnable(task, itemId));

变为

  MyFuture<?> f = new MyFuture<?>(mExecutor.submit(new DownloadRunnable(task, itemId)));

答案 1 :(得分:0)

Future是一个界面,你应该写成:

public class MuFuture<T> implements Future<T> {

}

然后我希望代码可以运行:

MyFuture<?> f = (MyFuture<?>) mExecutor.submit(new DownloadRunnable(task, itemId));
f.setVer(true);