【发布时间】:2020-02-23 10:36:29
【问题描述】:
我正在尝试编写一个单线程执行器,当任务被安排并根据PriorityBlockingQueue 执行任务时返回CompletableFuture。
我的任务如下所示:
public interface DriverTask<V> {
V call(WebDriver driver) throws Throwable;
default TaskPriority getPriority() {
return TaskPriority.LOW;
}
}
public enum TaskPriority {
HIGH,
MEDIUM,
LOW
}
现在我的问题是,当我使用 CompletableFuture.supplyAsync 方法时,Executor 只得到一个 Runnable,我不知道如何让我的 Executor 知道原始任务的优先级。
是否有其他方法可以创建 CompletableFuture 以便我根据优先级执行它们?
【问题讨论】:
-
我可以在你自己的 ExecutorService 中简单地完成一个 CompletableFuture。只需在您的 ExecutorService 中执行工作并调用 .complete() 这样您就可以编写基于优先级工作的代码......
-
@Alex 我会通过构造函数创建未来,然后在执行时调用 complete() 吗?或者还有什么我需要记住的。
-
还有其他障碍,比如投掷
Throwable或需要WebDriver,这使得supplyAsync不可行。谁应该提供参数,调用者还是执行者? -
所以
WebDriver是由调用者提供的,调用者也提供了DriverTask,或者它是范围内的某个(全局)变量? -
所以执行者知道
WebDriver。我可以假设,例如为了示例解决方案的方法currDriver()?
标签: java java-8 concurrency