一、概述

Spring通过ThreadPoolTaskExecutor实现线程池技术,它是使用jdk中的Java.util.concurrent.ThreadPoolExecutor进行实现。

1.1、xml方式配置

    <!-- Spring线程池 -->
    <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <!-- 核心线程数 -->
        <property name="corePoolSize" value="5" />
        <!-- 线程池维护线程的最大数量 -->
        <property name="maxPoolSize" value="10" />
        <!-- 允许的空闲时间, 默认60秒 -->
        <property name="keepAliveSeconds" value="60" />
        <!-- 任务队列 -->
        <property name="queueCapacity" value="50" />
        <!-- 线程超过空闲时间限制,均会退出直到线程数量为0 -->
        <property name="allowCoreThreadTimeOut" value="true"/>
        <!-- 对拒绝task的处理策略 -->
        <property name="rejectedExecutionHandler">
            <bean class="java.util.concurrent.ThreadPoolExecutor.DiscardOldestPolicy" />
        </property>
    </bean>

java代码

//帮我们创建容器
@RunWith(SpringJUnit4ClassRunner.class)
//指定创建容器时使用哪个配置文件
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringThreadPoolExecutorTest {

    @Autowired
    private ThreadPoolTaskExecutor taskExecutor;

    @Test
    public void newFixedThreadPoolTestSubmit() throws Exception {
        List<Future<?>> list=new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            Future<?> submit = taskExecutor.submit(new DataTask("ssss" + i));
            list.add(submit);
        }
        for (Future<?> future : list) {
            future.get();
        }
    }

    class DataTask implements Runnable {
        private String a;

        public DataTask(String a) {
            this.a = a;
        }

        @Override
        public void run() {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("-------"+ LocalDateTime.now()+a);
        }
    }
}

输出

-------2019-08-06T21:23:18.105ssss0
-------2019-08-06T21:23:18.105ssss3
-------2019-08-06T21:23:18.105ssss1
-------2019-08-06T21:23:18.105ssss2
-------2019-08-06T21:23:18.105ssss4
-------2019-08-06T21:23:19.110ssss8
-------2019-08-06T21:23:19.110ssss6
-------2019-08-06T21:23:19.110ssss5
-------2019-08-06T21:23:19.110ssss7
-------2019-08-06T21:23:19.110ssss9
-------2019-08-06T21:23:20.113ssss10
-------2019-08-06T21:23:20.113ssss12
-------2019-08-06T21:23:20.113ssss13
-------2019-08-06T21:23:20.113ssss11
-------2019-08-06T21:23:20.113ssss14
-------2019-08-06T21:23:21.117ssss18
-------2019-08-06T21:23:21.117ssss16
-------2019-08-06T21:23:21.117ssss17
-------2019-08-06T21:23:21.117ssss15
-------2019-08-06T21:23:21.117ssss19
View Code

相关文章:

  • 2022-12-23
  • 2020-01-04
  • 2021-06-10
  • 2021-07-06
  • 2022-12-23
  • 2021-11-16
  • 2021-06-06
  • 2022-01-26
猜你喜欢
  • 2021-12-09
  • 2022-12-23
  • 2022-12-23
  • 2021-10-11
  • 2022-12-23
  • 2022-12-23
  • 2021-12-19
相关资源
相似解决方案