Skip to content

ExecutorRegionKit 是否可以无需 executorRegion 这个属性 #538

@doujiangyoutiaolala

Description

@doujiangyoutiaolala
public class ExecutorRegionKit {
    /** 定制线程策略 */
    @Setter
    Supplier<ExecutorRegion> executorRegionSupplier = () -> new ExecutorRegion() {
        final UserThreadExecutorRegion userThreadExecutorRegion = new UserThreadExecutorRegion();
        final SimpleThreadExecutorRegion simpleThreadExecutorRegion = SimpleThreadExecutorRegion.me();

        @Override
        public ThreadExecutorRegion getUserThreadExecutorRegion() {
            return this.userThreadExecutorRegion;
        }

        @Override
        public ThreadExecutorRegion getSimpleThreadExecutorRegion() {
            return simpleThreadExecutorRegion;
        }
    };

    @Setter
    @Getter
    ExecutorRegion executorRegion = executorRegionSupplier.get();

    public ExecutorRegion createExecutorRegion() {
        return executorRegionSupplier.get();
    }

    /**
     * 简单的线程执行器管理域
     *
     * @param index index
     * @return 简单的线程执行器管理域
     */
    public ThreadExecutor getSimpleThreadExecutor(long index) {
        return executorRegion.getSimpleThreadExecutor(index);
    }
}
  1. ExecutorRegion executorRegion = executorRegionSupplier.get(); 这个属性在被创建时会调用 executorRegionSupplier.get() 方法。
    同时方法内部会创建一个 UserThreadExecutorRegion 对象。
    但是 executorRegion 的使用场景只有 executorRegion.getSimpleThreadExecutor(index); 就导致上述创建的 UserThreadExecutorRegion 对象没有被使用到。
  2. executorRegion.getSimpleThreadExecutor(index); 返回的是一个 SimpleThreadExecutorRegion.me() 全局唯一的对象,所以这个地方可以无需保存 SimpleThreadExecutorRegion simpleThreadExecutorRegion = SimpleThreadExecutorRegion.me() 的对象引用
  3. 所以是否可以删除这个 executorRegion 变量

代码可以修改成以下所示

public class ExecutorRegionKit {
    /** 定制线程策略 */
    @Setter
    Supplier<ExecutorRegion> executorRegionSupplier = () -> new ExecutorRegion() {
        final UserThreadExecutorRegion userThreadExecutorRegion = new UserThreadExecutorRegion();

        @Override
        public ThreadExecutorRegion getUserThreadExecutorRegion() {
            return this.userThreadExecutorRegion;
        }
    };

    public ExecutorRegion createExecutorRegion() {
        return executorRegionSupplier.get();
    }

    /**
     * 简单的线程执行器管理域
     *
     * @param index index
     * @return 简单的线程执行器管理域
     */
    public ThreadExecutor getSimpleThreadExecutor(long index) {
        return SimpleThreadExecutorRegion.me().getThreadExecutor(index);
    }
}
public interface ExecutorRegion {
    /**
     * user 线程执行器管理域
     *
     * @return user 线程执行器管理域
     */
    ThreadExecutorRegion getUserThreadExecutorRegion();

    /**
     * 用户虚拟线程执行器
     *
     * @return 用户虚拟线程执行器
     */
    default ThreadExecutorRegion getUserVirtualThreadExecutorRegion() {
        return UserVirtualThreadExecutorRegion.me();
    }

    /**
     * 简单的线程执行器管理域
     *
     * @return 简单的线程执行器管理域
     */
    default ThreadExecutorRegion getSimpleThreadExecutorRegion() {
        return SimpleThreadExecutorRegion.me();
    }

版本

  • ioGame version: 21.34

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions