Home / Class/ RunnableScheduledFutureTask Class — netty Architecture

RunnableScheduledFutureTask Class — netty Architecture

Architecture documentation for the RunnableScheduledFutureTask class in UnorderedThreadPoolEventExecutor.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  dea38476_a354_8be5_00ad_9f3dbefd1156["RunnableScheduledFutureTask"]
  4144915c_b885_a14e_a96d_7cc1d80f9535["UnorderedThreadPoolEventExecutor.java"]
  dea38476_a354_8be5_00ad_9f3dbefd1156 -->|defined in| 4144915c_b885_a14e_a96d_7cc1d80f9535
  849b3e9d_780c_7417_8113_2e283802988e["RunnableScheduledFutureTask()"]
  dea38476_a354_8be5_00ad_9f3dbefd1156 -->|method| 849b3e9d_780c_7417_8113_2e283802988e
  ef7f6d36_e810_6a1c_9174_51591406c59e["V()"]
  dea38476_a354_8be5_00ad_9f3dbefd1156 -->|method| ef7f6d36_e810_6a1c_9174_51591406c59e
  c15f77ba_519c_349c_d05e_1d3c4e5488c2["run()"]
  dea38476_a354_8be5_00ad_9f3dbefd1156 -->|method| c15f77ba_519c_349c_d05e_1d3c4e5488c2
  cab9a6bf_717f_a0ca_347a_4ffb654f9aa9["isPeriodic()"]
  dea38476_a354_8be5_00ad_9f3dbefd1156 -->|method| cab9a6bf_717f_a0ca_347a_4ffb654f9aa9
  eb3d8a4c_574b_a2c8_4a7e_aec0467ef6a0["getDelay()"]
  dea38476_a354_8be5_00ad_9f3dbefd1156 -->|method| eb3d8a4c_574b_a2c8_4a7e_aec0467ef6a0
  df803ffb_2dde_332e_a0f6_a059a7a7eaa3["compareTo()"]
  dea38476_a354_8be5_00ad_9f3dbefd1156 -->|method| df803ffb_2dde_332e_a0f6_a059a7a7eaa3

Relationship Graph

Source Code

common/src/main/java/io/netty/util/concurrent/UnorderedThreadPoolEventExecutor.java lines 224–284

    private static final class RunnableScheduledFutureTask<V> extends PromiseTask<V>
            implements RunnableScheduledFuture<V>, ScheduledFuture<V> {
        private final RunnableScheduledFuture<V> future;
        private final boolean wasCallable;

        RunnableScheduledFutureTask(EventExecutor executor, RunnableScheduledFuture<V> future, boolean wasCallable) {
            super(executor, future);
            this.future = future;
            this.wasCallable = wasCallable;
        }

        @Override
        V runTask() throws Throwable {
            V result =  super.runTask();
            if (result == null && wasCallable) {
                // If this RunnableScheduledFutureTask wraps a RunnableScheduledFuture that wraps a Callable we need
                // to ensure that we return the correct result by calling future.get().
                //
                // See https://github.com/netty/netty/issues/11072
                assert future.isDone();
                try {
                    return future.get();
                } catch (ExecutionException e) {
                    // unwrap exception.
                    throw e.getCause();
                }
            }
            return result;
        }

        @Override
        public void run() {
            if (!isPeriodic()) {
                super.run();
            } else if (!isDone()) {
                try {
                    // Its a periodic task so we need to ignore the return value
                    runTask();
                } catch (Throwable cause) {
                    if (!tryFailureInternal(cause)) {
                        logger.warn("Failure during execution of task", cause);
                    }
                }
            }
        }

        @Override
        public boolean isPeriodic() {
            return future.isPeriodic();
        }

        @Override
        public long getDelay(TimeUnit unit) {
            return future.getDelay(unit);
        }

        @Override
        public int compareTo(Delayed o) {
            return future.compareTo(o);
        }
    }

Frequently Asked Questions

What is the RunnableScheduledFutureTask class?
RunnableScheduledFutureTask is a class in the netty codebase, defined in common/src/main/java/io/netty/util/concurrent/UnorderedThreadPoolEventExecutor.java.
Where is RunnableScheduledFutureTask defined?
RunnableScheduledFutureTask is defined in common/src/main/java/io/netty/util/concurrent/UnorderedThreadPoolEventExecutor.java at line 224.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free