美文网首页
Spring实现多线程

Spring实现多线程

作者: IT小池 | 来源:发表于2020-01-27 14:37 被阅读0次

    我们过去实现多线程的方式通常是继承 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();
       }
     }
    

    相关文章

      网友评论

          本文标题:Spring实现多线程

          本文链接:https://www.haomeiwen.com/subject/pfhethtx.html