我需要在应用程序代码中使用单线程计划执行程序服务,该服务在wildfly和SE上运行 . java并发库提供了singleThreadedScheduledExecutorService . wildfly的问题是,managed-scheduled-executor-service不允许指定maxThreads . 我想我可以创建一个引用托管预定执行程序服务的类和一个maxThreads为1的托管执行程序服务 . 然后让调度操作将作业提交给managed-executor-service . 可调用的泛型问题导致错误
incompatible types: inference variable V has incompatible bounds
equality constraints: J
lower bounds: java.util.concurrent.Future<T>
发生 .
我的代码如下 . 该模式适用于runnables,它们不会返回任何内容,但会因callables而失败 . 方法“public ScheduledFuture schedule(可调用作业,长延迟,TimeUnit单元)”是有问题的 . 反正有解决这个问题吗?
@ApplicationScoped
public class ExecutorImpl implements RITExecutor {
private static final Logger LOG = LoggerFactory.getLogger(new Throwable().getStackTrace()[0].getClassName());
@Resource(lookup = "java:jboss/ee/concurrency/executor/singleThreaded")
private ScheduledExecutorService TIMER;
@Resource (lookup = "java:jboss/ee/concurrency/scheduler/default")
private ExecutorService EXECUTOR;
@Override
public <J> ScheduledFuture<J> schedule(Callable<J> job, long delay, TimeUnit unit) {
return TIMER.schedule(()->EXECUTOR.submit(job),delay,unit);
}
@Override
public ScheduledFuture<?> schedule(Runnable job, long delay, TimeUnit unit) {
return TIMER.schedule(()->EXECUTOR.submit(job),delay,unit);
}
@Override
public <J> Future<J> submit(Callable<J> job) {
return EXECUTOR.submit(job);
}
@Override
public Future<?> submit(Runnable job) {
return EXECUTOR.submit(job);
}
@Override
public <J> Future<J> submit(Runnable job, J result) {
return EXECUTOR.submit(job, result);
}
1 回答
用演员固定它 . 不知道我为什么不早点想到这一点 .