java - 自定义 future 对象

标签 java multithreading concurrency threadpool

我想创建自定义 Future 对象。

下面的代码可以正常工作

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

我想获取提交的返回值并将其分配给 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) {
        ...
    }
}

最佳答案

您可以通过传递 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)));

关于java - 自定义 future 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30964969/

相关文章:

multithreading - Indy 10 IdTCPClient 使用单独的线程读取数据?

google-app-engine - 如何在开发环境中测试后端实例的并发?

java - 如何实现原子请求计数器

Java 8 嵌套循环流

java - 从 ArrayList 中删除偶数

java - 如何设置图像按钮的文本(Android)?

java - ArrayList 使用 addAll() 编译器显示了泛型的不同行为

ios - 魔法记录在后台保存

multithreading - oracle序列上的多线程。线程是否有可能从其他线程获得相同的序列值?

concurrency - 如果创建可变变量和可变引用并在单独的线程中更改其中之一,Rust 中会发生什么?