0

我正在尝试运行 CompletionService 来执行线程数。这是我的代码

CompletionService<ReadProcess_MongoDB> taskCompletionService;
    taskCompletionService = new ExecutorCompletionService<ReadProcess_MongoDB>(pool);

 Collection<Callable<ReadProcess_MongoDB>> list = new LinkedList<Callable<ReadProcess_MongoDB>>();
       list.add((Callable<ReadProcess_MongoDB>) new ReadProcess_MongoDB(0));
       list.add((Callable<ReadProcess_MongoDB>) new ReadProcess_MongoDB(1));

Java 在 list.add 处显示运行时错误。
错误:-(不能转换为 java.util.concurrent.Callable)。

4

2 回答 2

1

在这一行

list.add((Callable<ReadProcess_MongoDB>) new ReadProcess_MongoDB(0));

您正在尝试您的new ReadProcess_MongoDB(0)作为Callable<ReadProcess_MongoDB>. 如果这失败了,那是因为你的ReadProcess_MongoDB类不能转换为Callable<ReadProcess_MongoDB>; 那只能是因为您没有Callable<ReadProcess_MongoDB>在该类中实现。

将其声明为

public class ReadProcess_MongoDB implements Callable<ReadProcess_MongoDB> {
    //...
}

然后,您需要确保您的类实现了Callable接口的方法。只有一个:call()方法。

(不过,您自己要清楚,这确实是您想要的。您确定不希望它Callable<T>为其他类型实现T吗?)

于 2014-12-22T13:38:27.307 回答
0

java 编译器说 ReadProcess_MongoDB 类不是 java.util.concurrent.Callable 类的子类。

  • 你的意思是另一个 Callable 类吗?在这种情况下,您应该在演员表中指定完整的包名称:package .Callable
  • 否则,您可能需要实现 Callable 类/接口才能使用您创建的 ReadProcess_MongoDB 对象。
于 2014-12-22T13:37:29.087 回答