@Override
    public void execute(@NonNull Runnable runnable) {
        Collection<TaskAwarePlugin> taskAwarePluginList = threadPoolPluginManager.getTaskAwarePluginList();
        for (TaskAwarePlugin taskAwarePlugin : taskAwarePluginList) {
            runnable = taskAwarePlugin.beforeTaskExecute(runnable);
            if (Objects.isNull(runnable)) {
                return;
            }
        }
        super.execute(runnable);
    }
@Test
    public void testInvokeExecuteAwarePlugin() {
        TestExecuteAwarePlugin plugin = new TestExecuteAwarePlugin();
        executor.register(plugin);
        executor.execute(() -> {
        });
        ThreadUtil.sleep(500L);
        Assert.assertEquals(2, plugin.getInvokeCount().get());

        // no task will be executed because it has been replaced with null
        executor.register(new TestTaskToNullAwarePlugin());
        executor.execute(() -> {
        });
        ThreadUtil.sleep(500L);
        Assert.assertEquals(2, plugin.getInvokeCount().get());
    }