
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
线程池是程序员在学习软件编程开发技术的时候需要重点掌握的一个编程知识,下面我们就通过案例分析来了解一下,线程池配置与应用方法都有哪些。
Future获取异步执行的结果
可以发现主调用方法并没有等到调用方法执行完就结束了当前的任务,如果想要知道调用的三个方法全部执行完该怎么办呢,下面就可以用到异步回调。
异步回调就是让每个被调用的方法返回一个Future类型的值,Spring中提供了一个Future接口的子类:AsyncResult,所以我们可以返回AsyncResult类型的值。
配置线程池
前面是简单的使用方法,使用默认的TaskExecutor。如果想使用自定义的Executor,可以结合@Configuration注解的配置方式,Spring基本上共有五大线程池。
SimpleAsyncTaskExecutor:不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程。
SyncTaskExecutor:这个类没有实现异步调用,只是一个同步操作。只适用于不需要多线程的地方
ConcurrentTaskExecutor:Executor的适配类,不推荐使用。如果ThreadPoolTaskExecutor不满足要求时,才用考虑使用这个类
SimpleThreadPoolTaskExecutor:是Quartz的SimpleThreadPool的类。线程池同时被quartz和非quartz使用,才需要使用此类
ThreadPoolTaskExecutor:常使用,推荐。其实质是对java.util.concurrent.ThreadPoolExecutor的包装,
线程池的配置很灵活,对核心线程数、大线程数等属性进行配置。其中,rejection-policy,当线程池已经达到大线程数的时候,如何处理新任务。可选策略有CallerBlocksPolicy、CallerRunsPolicy等。CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行。
线程上下文信息传递
微服务架构中的一次请求会涉及多个微服务。或者一个服务中会有多个处理方法,这些方法有可能是异步方法。有些线程上下文信息,如请求的路径,用户的userId,这些信息会一直在请求中传递。如果不做任何处理,我们看下是否能够正常获取这些信息。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。