How to configure Async and Sync Event publishers using spring

前端 未结 4 926
北恋
北恋 2021-01-17 13:25

I am trying to implement an event framework using spring events.I came to know that the default behavior of spring event framework is sync. But during spring context initial

4条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-17 14:12

    i am not good for edit with stackoverflow. please forgive me.

    1. SyncTaskExecutor

    I don't need to add comment that you can know well. this is synchronized. this Executor run task in sequence, and blocked for every task.

     public class SyncTaskExecutor implements TaskExecutor, Serializable {
    
    /**
     * Executes the given {@code task} synchronously, through direct
     * invocation of it's {@link Runnable#run() run()} method.
     * @throws IllegalArgumentException if the given {@code task} is {@code null}
     */
    @Override
    public void execute(Runnable task) {
        Assert.notNull(task, "Runnable must not be null");
        task.run();
    }
    

    }

    1. SimpleAsyncTaskExecutor

    This class is very large, so i just choose section of code. If you give threadFactory, will be retrieved Thread from this factory, or will be create new Thread.

        protected void doExecute(Runnable task) {
        Thread thread = (this.threadFactory != null ? this.threadFactory.newThread(task) : createThread(task));
        thread.start();
    }
    
    1. ThreadPoolTaskExecutor

    this class use jdk5's current pkg ThreadPoolTaskExecutor. but spring encapsulate functionality. Spring is good at this way, jdk6's current and jdk7'scurrent pkg have some difference. this will be get Thread from ThreadPool and reuse it, execute every task Asynchronized. If you want to know more detail, see JKD source code.

提交回复
热议问题