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);
}
}
- ExecutorRegion executorRegion = executorRegionSupplier.get(); 这个属性在被创建时会调用 executorRegionSupplier.get() 方法。
同时方法内部会创建一个 UserThreadExecutorRegion 对象。
但是 executorRegion 的使用场景只有 executorRegion.getSimpleThreadExecutor(index); 就导致上述创建的 UserThreadExecutorRegion 对象没有被使用到。
- executorRegion.getSimpleThreadExecutor(index); 返回的是一个 SimpleThreadExecutorRegion.me() 全局唯一的对象,所以这个地方可以无需保存 SimpleThreadExecutorRegion simpleThreadExecutorRegion = SimpleThreadExecutorRegion.me() 的对象引用
- 所以是否可以删除这个 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();
}
版本
同时方法内部会创建一个 UserThreadExecutorRegion 对象。
但是 executorRegion 的使用场景只有 executorRegion.getSimpleThreadExecutor(index); 就导致上述创建的 UserThreadExecutorRegion 对象没有被使用到。
代码可以修改成以下所示
版本