code: @Nullable
    private EventExecutorGroup createEventExecutorGroup(int size) {
      if (size <= 0) {
        return null;
      }
  
      ThreadFactory threadFactory = new ThreadFactory() {
        private final ThreadGroup threadGroup = new ThreadGroup(serviceName + "-executor-thread");
        private final AtomicLong count = new AtomicLong(0);
  
        @Override
        public Thread newThread(Runnable r) {
          Thread t = new Thread(threadGroup, r, String.format("%s-executor-%d", serviceName, count.getAndIncrement()));
          t.setDaemon(true);
          return t;
        }
      };
  
      UnorderedThreadPoolEventExecutor executor = new UnorderedThreadPoolEventExecutor(size, threadFactory,
                                                                                       rejectedExecutionHandler);
      if (execThreadKeepAliveSecs > 0) {
        executor.setKeepAliveTime(execThreadKeepAliveSecs, TimeUnit.SECONDS);
        executor.allowCoreThreadTimeOut(true);
      }
      return new NonStickyEventExecutorGroup(executor);
    }
docs: Create {@link EventExecutorGroup} for executing handle methods.
  
  @param size size of threadPool
  @return instance of {@link EventExecutorGroup} or {@code null} if {@code size} is {@code <= 0}.