`
dragonhunter
  • 浏览: 33506 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ThreadPoolTaskExecutor的常见问题

    博客分类:
  • java
阅读更多

spring的ThreadPoolTaskExecutor使用可以参考http://kim-miao.iteye.com/blog/1310015。

1.用junit跑测试用例,为什么用ThreadPoolTaskExecutor,里面的代码不执行了。看下下面代码:

 

 private Executor priceSyncExecutor = context.getBean("priceSyncExecutor",Executor.class);
try{
     for(int i = 0; i < 100;i++) {
                final int j = i;
                priceSyncExecutor.execute(new Runnable() {
                    @Override
                    public void run() {
                        method1(j);
                    }
                });
            }
            Thread.sleep(5000L);
}catch(Exception e){
  e.printStackTrace();
}

 public void method1(int i){
        try{
            Thread.sleep(1000L);
            System.out.println(i);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

 代码比较简单,如果没有主方法的Thread.sleep(5000L),可能一个print都没有打出来。

改变5000L的值,打印的行数也不一样。这个主要是由于executor.execute() 激活的线程都是守护线程,主线程结束,守护线程就会放弃执行,这个在业务中式符合逻辑的,在单元测试中为了看到执行效果,需要自行阻塞主线程,也就是我们这里的sleep 5000L。

顺便说下守护线程,在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 在Thanking in java 中说到:

守护线程也叫后台线程,是指在程序中运行的时候在后台提供一种通用服务的线程,并且这种并不属于程序中不可或缺的部分。因此,当所有的非后台线程结束时,程序也就终止了,同时会杀死进程中的所有后台线程。比较常用的是java GC。

 

分享到:
评论

相关推荐

    springboot中@Async默认线程池导致OOM问题

    在 SpringBoot 中使用 @Async 注解来实现异步操作是一种非常常见的做法,但是如果不小心,可能会导致 OOM(Out of Memory)问题。本文将详细介绍 SpringBoot 中 @Async 默认线程池导致 OOM 问题的原因、解决方法以及...

    谈谈SpringBoot中@Async注解使用的一些误区

    本文将深入探讨这些常见误区,并提供解决方案。 首先,我们要明确`@Async`注解的基本用法。当在方法上添加`@Async`时,该方法将会被异步执行。这意味着它不会立即返回结果,而是会由一个后台线程来处理。注意,这种...

    springMVC+rest+threadpool

    在SpringMVC中,我们可以轻松地配置和实现RESTful服务,提供JSON或XML格式的数据交换,这在构建分布式、跨平台的应用中非常常见。 **线程池(ThreadPool)** 线程池是一种多线程编程中的管理策略,用于有效地控制...

    新手也能看懂的SpringBoot异步编程指南(简单易懂)

    本文主要介绍了SpringBoot异步编程的知识点,涵盖了Future模式的核心思想、ThreadPoolTaskExecutor的使用、SpringBoot异步编程实战等内容。 1. Future 模式: Future模式是一种异步调用模式,在处理耗时操作和多...

    SpringBoot2线程池定义使用方法解析

    下面是ThreadPoolTaskExecutor的一些常见配置选项: * corePoolSize:核心线程数,表示线程池中最少的线程数。 * maxPoolSize:最大线程数,表示线程池中最多的线程数。 * queueCapacity:队列大小,表示线程池中...

    WEB多线程开发

    - **死锁和竞态条件**:识别和预防这两种常见的多线程问题,确保程序的稳定性和可靠性。 - **线程通信**:了解`wait()`, `notify()`, `notifyAll()`方法以及`BlockingQueue`等同步机制,用于线程间的通信和协作。 - ...

    基于Spring+Ibatis的安全线程实现

    在IT行业中,尤其是在Java开发领域,Spring框架与iBatis持久层框架的组合是常见的应用架构。本篇文章将深入探讨如何在这样的环境下实现安全的线程管理,确保系统的高效、稳定运行。 首先,Spring框架提供了丰富的...

    spring 线程池

    标题中的“Spring线程池”指的是Spring框架中提供的线程池实现,它是Spring对Java的...同时,结合日志和监控工具,我们可以实时查看线程池的状态,包括当前线程数、活跃线程数、任务队列长度等,以便于诊断和解决问题。

    java统计高并发首页访问量,记录客户登录信息

    在Java开发中,统计高并发环境下首页访问量并记录客户登录信息是一项常见的需求,这涉及到系统性能优化、数据持久化以及并发控制等多个方面。在这个项目中,开发框架选择了Spring,这是一个广泛使用的Java企业级应用...

    java面试准备要点记录

    ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(50); taskExecutor.setMaxPoolSize(100); taskExecutor.setQueueCapacity(1000); // 其他配置... return...

    spring MVC 初始启动blocking queue

    常见的`BlockingQueue`实现有`ArrayBlockingQueue`、`LinkedBlockingQueue`和`PriorityBlockingQueue`等。 在Spring MVC中,我们可以利用`BlockingQueue`来管理并发请求,比如在高并发环境下处理请求或者进行异步...

    spring mvc 定时

    在Spring MVC框架中实现定时任务是一项常见的需求,特别是在企业级应用中,往往需要根据特定时间进行数据处理、报表生成或发送通知等操作。本篇将详细介绍如何在Spring MVC中配置和使用定时任务,并结合数据库中设置...

    spring timer

    `ThreadPoolTaskScheduler`是其常见实现,它基于`ThreadPoolExecutor`。 3. **CronTrigger**: 在Spring中,我们经常用到`@Scheduled`注解配合cron表达式来实现按时间触发的任务。cron表达式是一种强大的定时表达...

    Spring的定时任务开发及对Quartz和Timer支持

    在【标题】"Spring的定时任务开发及对Quartz和Timer支持"中,涉及到的是Spring在处理定时任务方面的特性,这在企业级应用中非常常见,用于执行一些周期性的后台任务,如数据同步、报表生成、清理任务等。 首先,...

    一线互联网企业面试题.pdf

    2. **分布式锁**:分布式锁是多节点环境下确保数据一致性的重要工具,常见实现包括基于Zookeeper、Redis或数据库的锁机制。 3. **Nginx 请求转发**:Nginx可以通过负载均衡策略将请求转发至不同服务器,其中按权重...

    一线互联网公司面试题目

    19. **线程池选择**:Java的ExecutorService和Spring的ThreadPoolTaskExecutor是线程池实现。 20-21. **字符串格式化**和**时间格式化**:使用String.format()和SimpleDateFormat或DateTimeFormatter进行格式化。 ...

    Spring3.1 定时器配置所需jar包-文档-xml配置-class类-maven-IDEA

    在Spring框架中,定时任务是应用开发中常见的一种需求,比如定期执行数据清理、日志备份等操作。Spring 3.1版本引入了强大的定时任务支持,它允许开发者使用XML配置或者注解来定义定时任务。这个压缩包包含了实现...

    Java线程池介绍Java开发Java经验技巧共8页.pd

    - **拒绝策略(Rejected Execution Handler)**:当线程池和队列都满时,处理新任务的策略,常见的策略有抛出异常、忽略任务、调用系统守护线程或自定义处理。 2. **线程池的创建与使用**: 使用`Executors`工厂...

    北京恒华科技校园招聘Java Web开发工程师笔试题

    - **Spring中实现多线程**:Spring提供了ThreadPoolTaskExecutor,可以通过配置来创建线程池。 - **使用定时器Timer**:用于定期执行任务,内部维护了一个线程。 6. **设计模式:简单工厂模式** 简单工厂模式是...

    基于Spring的listener和Task

    此外,Spring Task还允许你配置一个`TaskScheduler`实例来实现更高级的调度策略,或者使用`ThreadPoolTaskExecutor`来并行执行多个任务,以提高系统效率。 结合使用Spring的Listener和Task,我们可以构建出强大的...

Global site tag (gtag.js) - Google Analytics