Spring实现多线程

2020-01-27  本文已影响0人  IT小池

我们过去实现多线程的方式通常是继承 Thread类或者实现Runnable 接口,这种方式实现起来比较麻烦。spring封装了Java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性。spring通过任务执行器TaskExecutor来实现多线程与并发编程。通常使用ThreadPoolTaskExecutor来实现一个基于线程池的TaskExecutor.

开启线程池

首先你要实现 AsyncConfigurer这个接口,目的是开启一个线程池 ,这个步骤我们可以基于spring的配置文件实现,修改applicationContext-timer.xml文件,代码如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:task="http://www.springframework.org/schema/task"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/task
   http://www.springframework.org/schema/task/spring-task.xsd">
  <!--开启注解驱动-->
  <task:annotation-driven executor="taskExecutor" scheduler="seckillScheduler"/>
  <task:scheduler id="seckillScheduler" pool-size="10"/>
  <!--
    线程池
  -->
  <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <!--初始线程数量-->
    <property name="corePoolSize" value="10" />
    <!--最大线程数量-->
    <property name="maxPoolSize" value="100" />
    <!--最大队列数量-->
    <property name="queueCapacity" value="200" />
    <!--线程最大空闲时间-->
    <property name="keepAliveSeconds" value="3000" />
    <!--
      拒绝策略,当线程池中的线程被占用完了,没有剩余线程了,如果此时有新的任务要执行,该采取的策略
    -->
    <property name="rejectedExecutionHandler">
       <bean class="java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy" />
    </property>
  </bean>
</beans>
异步执行声明

然后注入一个类,实现你的业务,并在你的Bean的方法中使用@Async注解来声明其是一个异步任务,如:

/***
  * 多线程下单操作
  */
  @Async
  public void createOrder(){
    try {
      System.out.println("准备执行....");
      Thread.sleep(20000);
       System.out.println("开始执行....");
   } catch (InterruptedException e) {
      e.printStackTrace();
   }
 }
上一篇 下一篇

猜你喜欢

热点阅读