- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,ExecutorCompletionService 用于运行几个实现 Callable 的任务。当任务提交到 ExecutorCompletionServer 时,它会给出编译错误:
The method submit(Callable<T>) in the type ExecutorCompletionService<T> is not applicable for the arguments (AbstractTask<capture#2-of ? extends Object>)
这就是我提交任务的方式`。
List<AbstractTask<? extends Object>> taskList =new ArrayList<>();
addTasks(new TaskA()); //TaskA,TaskB,TaskC are child classses of AbstractTask. addTasks() method add the child classes to taskList.
addTasks(new TaskB());
addTasks(new TaskC());
List<Future<? extends Object>> futureList= new ArrayList<Future <? extends Object> >();
final ExecutorService pool = Executors.newFixedThreadPool( TASK_SIZE );
final ExecutorCompletionService<T> completionService = new ExecutorCompletionService<T >(pool);
for ( AbstractTask<? extends Object> callable : taskList) {
futureList.add( completionService.submit(callable) );
}
这是addTaskMethod。
public void addTasks(AbstractTask<? extends Object> task){
taskList.add(task);
}
这是我的抽象类。
public abstract class AbstractTask<T extends Object> implements
java.util.concurrent.Callable<T> {
@Override
public T call() throws Exception {
return begin();
}
public abstract <B extends Object> B begin() throws RuntimeException ;
}
甚至是 java.util.concurrent.ExecutorCompletionService<V>
中的以下方法“submit()”接受争论为
public Future<V> submit(Callable<V> task) {
if (task == null) throw new NullPointerException();
RunnableFuture<V> f = newTaskFor(task);
executor.execute(new QueueingFuture(f));
return f;
}
为什么我无法提交我的AbstractTask<? extends Object>
?我的 AbstractTask 可以具有从 Object 扩展的任何值。 (如果我简单地删除 for 循环中的 <? extends Object>
,那么它就可以了。但是我的工具:Eclipse 再次警告 Type safety: The expression of type AbstractTask needs unchecked conversion to conform to Callable<T>
。我该如何解决这个问题?)
编辑:这是 TaskA 类。
public class TaskA extends AbstractTask<Object> {
@SuppressWarnings("unchecked")
@Override
public java.lang.String begin() throws RuntimeException {
System.out.println("Task A runs");
return "A";
}
}
最佳答案
您正在创建一个 ExecutorCompletionService<T>
。因此,这是一个接受 Callable<T>
实例的 ExecutorCompletionService 。
但是您正在提交 AbstractTask<? extends Object>
的实例。一个Callable<? extends Object>
不是Callable<T>
.
一个Callable<T>
返回 T.A Callable<? extends Object>
的实例返回一些未知类型,我们只知道该类型扩展了 Object。这基本上就像想要将未知物体放入碎纸机中一样。碎纸机只能碎纸,不能碎任何物体。编译器会阻止你这样做,因为它显然不能正常工作。
您需要一个ExecutorCompletionService<Object>
.
关于java - ExecutorCompletionService 不适用于给定的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30965339/
我想在 ExecutorCompletionService 上使用构造函数,它采用预定义的 BlockingQueue。 任何人都可以提供代码片段来展示这是如何完成的。似乎只需要一个带有 Future
我在程序完成时遇到 Java 的 ExecutorCompletionService 问题。 我需要使用 ExecutorCompletionService 而不是 ExecutorService 因
阅读JDK ExecutorCompletionService文档示例代码 /* * Suppose instead that you would like to use the first non
在我的应用程序中,ExecutorCompletionService 用于运行几个实现 Callable 的任务。当任务提交到 ExecutorCompletionServer 时,它会给出编译错误:
我有一个用 java 编写的应用程序,需要找到网络上所有可访问的主机。 我使用 InetAddress.isReachable() 来执行此操作,超时为 2000 毫秒。 我查找当前本地机器的 IP
我有一个场景 文本文件每天动态生成。 0 至每天 8 个。每个文件的大小可以从小到大。取决于当天的数据。 需要对其进行一些检查(业务检查、规则)。 我按照以下方式实现,它的行为不符合预期,似乎我做错了
我向 ExecutorCompletionService 提交了 5 个职位,但它似乎作业是按顺序执行的。传递给 ExecutorCompletionService 的构造函数的 ExecutorSe
我正在开发一个项目,其中有大量数据元素输入需要处理。每个的处理都是独立于其他的,我需要每个的返回结果。我现在正在做的是为每个元素创建一个 Callable 任务来进行处理,并使用 ExecutorCo
AbstractExecutorService public abstract class AbstractExecutorService implements ExecutorService
我有一个服务器应用程序监听 ServerSocket用于传入查询。提交查询的客户端希望打开到服务器的套接字,将其查询传递到上游,然后(可能在很短的时间之后)从他们使用的相同套接字读取对其查询的响应提交
我的 ExecutorCompletionService 出现了奇怪的行为。该项目被添加到 ExecutorCompletionService.submit() 中。然后它会被处理并由之前提交的 Ca
据我所知,执行器完成服务提供来自 future 对象的输出,无论任务在入站队列中请求的顺序如何,即无论哪个任务首先完成,结果都会放入出站队列中。另一方面,FixedThreadPool也是并行执行任务
我已经实现了一个基于的 PriorityExecutor http://funofprograming.blogspot.co.il/2013/11/priorityexecutorservice-f
我正在使用 ExecutorCompletionService 提交一些任务。我想等待最长的时间,比如说 5 秒,然后停止处理。 ExecutorService executorService = E
所以阅读 ExecutorCompletionService 的 javadoc ,看起来它使用了 threadpoolexecutor,它有像 invokeAll() 这样的方法,但是 Execut
我在使用 ExecutorCompletionService 时遇到了以下问题.我想在不同的线程中调用很多 Callable。这些 Callable 不会彼此共享任何信息。我需要为每个 Callabl
我正在尝试同时使用 ExecutorCompletionService 和 ScheduledExecutorService。 我需要做的是安排不同的 Activity ,每个 Activity 都有
我使用 Spring Boot 版本 2.1.9.RELEASE 和 Java 1.8,并且有两个 lang 运行进程,我想并行启动它们。因此我决定使用线程。 当我启动 sumResult 方法时,第
在我的应用程序中,我的任务已实现 Callable提交至ExecutorCompletionService并返回Future实例存储在List中。然后那些Future实例一一检索如下。
我一直在使用 ExecutorCompletionService 中的示例代码,并将以下示例代码放在一起。 solve() 中的代码按预期工作并打印 1 2 3 4 5 solve2() 中的代码不会
我是一名优秀的程序员,十分优秀!