欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring 事件机制 异步操作

程序员文章站 2022-07-12 18:32:54
...

1 spring 事件机制的好处:解耦合,对于一对多的操作,可以接触代码耦合

 

2 针对于要解耦的操作,很多都可以异步操作,主线程响应时间会变快,spring提供的事件机制默认是同步的,

 

	@Override
	public void multicastEvent(final ApplicationEvent event, ResolvableType eventType) {
		ResolvableType type = (eventType != null ? eventType : resolveDefaultEventType(event));
		for (final ApplicationListener<?> listener : getApplicationListeners(event, type)) {
			Executor executor = getTaskExecutor();
                        //线程池存在,走异步操作
			if (executor != null) {
				executor.execute(new Runnable() {
					@Override
					public void run() {
						invokeListener(listener, event);
					}
				});
			}
			else {
				invokeListener(listener, event);
			}
		}
	}

 如果想要实现异步操作,需要在发布者中提供ApplicationEventMulticaster的实现,并注入一个线程池,这样就可以实现异步;

坏处: 所有的操作都会异步

 

3 异步的另外一种实现:@Async 可以在事件发布方法上,使用此注解,让事件发布和订阅者处理整个过程是异步的,使用异步注解最好自定义一个线程池,并定义超过线程池容量后的排斥机制,防止线程丢失