Home / Class/ ThreadPerChannelEventLoop Class — netty Architecture

ThreadPerChannelEventLoop Class — netty Architecture

Architecture documentation for the ThreadPerChannelEventLoop class in ThreadPerChannelEventLoop.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  b87e07e1_e07d_3d5f_765a_d3d4c6ab5fef["ThreadPerChannelEventLoop"]
  ec6d722e_b948_20ce_bd65_f8522703a95b["ThreadPerChannelEventLoop.java"]
  b87e07e1_e07d_3d5f_765a_d3d4c6ab5fef -->|defined in| ec6d722e_b948_20ce_bd65_f8522703a95b
  2766a1bf_da0d_290e_51e4_ac140a42f10c["ThreadPerChannelEventLoop()"]
  b87e07e1_e07d_3d5f_765a_d3d4c6ab5fef -->|method| 2766a1bf_da0d_290e_51e4_ac140a42f10c
  9f35da76_624e_6c41_1f1c_49036f89558d["ChannelFuture()"]
  b87e07e1_e07d_3d5f_765a_d3d4c6ab5fef -->|method| 9f35da76_624e_6c41_1f1c_49036f89558d
  3e6d1ce2_5922_d93a_09d4_657b43bee607["run()"]
  b87e07e1_e07d_3d5f_765a_d3d4c6ab5fef -->|method| 3e6d1ce2_5922_d93a_09d4_657b43bee607
  373fc256_8123_14a6_3cdd_828ccd32f022["deregister()"]
  b87e07e1_e07d_3d5f_765a_d3d4c6ab5fef -->|method| 373fc256_8123_14a6_3cdd_828ccd32f022
  d662fcad_90ae_5193_68d4_07c4ae18589f["registeredChannels()"]
  b87e07e1_e07d_3d5f_765a_d3d4c6ab5fef -->|method| d662fcad_90ae_5193_68d4_07c4ae18589f

Relationship Graph

Source Code

transport/src/main/java/io/netty/channel/ThreadPerChannelEventLoop.java lines 24–103

@Deprecated
public class ThreadPerChannelEventLoop extends SingleThreadEventLoop {

    private final ThreadPerChannelEventLoopGroup parent;
    private Channel ch;

    public ThreadPerChannelEventLoop(ThreadPerChannelEventLoopGroup parent) {
        super(parent, parent.executor, true);
        this.parent = parent;
    }

    @Override
    public ChannelFuture register(ChannelPromise promise) {
        return super.register(promise).addListener(new ChannelFutureListener() {
            @Override
            public void operationComplete(ChannelFuture future) throws Exception {
                if (future.isSuccess()) {
                    ch = future.channel();
                } else {
                    deregister();
                }
            }
        });
    }

    @Deprecated
    @Override
    public ChannelFuture register(Channel channel, ChannelPromise promise) {
        return super.register(channel, promise).addListener(new ChannelFutureListener() {
            @Override
            public void operationComplete(ChannelFuture future) throws Exception {
                if (future.isSuccess()) {
                    ch = future.channel();
                } else {
                    deregister();
                }
            }
        });
    }

    @Override
    protected void run() {
        for (;;) {
            Runnable task = takeTask();
            if (task != null) {
                task.run();
                updateLastExecutionTime();
            }

            Channel ch = this.ch;
            if (isShuttingDown()) {
                if (ch != null) {
                    ch.unsafe().close(ch.unsafe().voidPromise());
                }
                if (confirmShutdown()) {
                    break;
                }
            } else {
                if (ch != null) {
                    // Handle deregistration
                    if (!ch.isRegistered()) {
                        runAllTasks();
                        deregister();
                    }
                }
            }
        }
    }

    protected void deregister() {
        ch = null;
        parent.activeChildren.remove(this);
        parent.idleChildren.add(this);
    }

    @Override
    public int registeredChannels() {
        return 1;
    }
}

Frequently Asked Questions

What is the ThreadPerChannelEventLoop class?
ThreadPerChannelEventLoop is a class in the netty codebase, defined in transport/src/main/java/io/netty/channel/ThreadPerChannelEventLoop.java.
Where is ThreadPerChannelEventLoop defined?
ThreadPerChannelEventLoop is defined in transport/src/main/java/io/netty/channel/ThreadPerChannelEventLoop.java at line 24.

Analyze Your Own Codebase

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

Try Supermodel Free