首页 文章

如何在wildfly中实现singleThreadedScheduledExcecutor

提问于
浏览
0

我需要在应用程序代码中使用单线程计划执行程序服务,该服务在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 回答

  • 0

    用演员固定它 . 不知道我为什么不早点想到这一点 .

    @Override
        public <J> ScheduledFuture<J> schedule(Callable<J> job, long delay, TimeUnit unit) {
            return (ScheduledFuture<J>)TIMER.schedule(()->EXECUTOR.submit(job),delay,unit);
    

相关问题