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(Out of Memory)问题。本文将详细介绍 SpringBoot 中 @Async 默认线程池导致 OOM 问题的原因、解决方法以及...
本文将深入探讨这些常见误区,并提供解决方案。 首先,我们要明确`@Async`注解的基本用法。当在方法上添加`@Async`时,该方法将会被异步执行。这意味着它不会立即返回结果,而是会由一个后台线程来处理。注意,这种...
在SpringMVC中,我们可以轻松地配置和实现RESTful服务,提供JSON或XML格式的数据交换,这在构建分布式、跨平台的应用中非常常见。 **线程池(ThreadPool)** 线程池是一种多线程编程中的管理策略,用于有效地控制...
本文主要介绍了SpringBoot异步编程的知识点,涵盖了Future模式的核心思想、ThreadPoolTaskExecutor的使用、SpringBoot异步编程实战等内容。 1. Future 模式: Future模式是一种异步调用模式,在处理耗时操作和多...
下面是ThreadPoolTaskExecutor的一些常见配置选项: * corePoolSize:核心线程数,表示线程池中最少的线程数。 * maxPoolSize:最大线程数,表示线程池中最多的线程数。 * queueCapacity:队列大小,表示线程池中...
- **死锁和竞态条件**:识别和预防这两种常见的多线程问题,确保程序的稳定性和可靠性。 - **线程通信**:了解`wait()`, `notify()`, `notifyAll()`方法以及`BlockingQueue`等同步机制,用于线程间的通信和协作。 - ...
在IT行业中,尤其是在Java开发领域,Spring框架与iBatis持久层框架的组合是常见的应用架构。本篇文章将深入探讨如何在这样的环境下实现安全的线程管理,确保系统的高效、稳定运行。 首先,Spring框架提供了丰富的...
标题中的“Spring线程池”指的是Spring框架中提供的线程池实现,它是Spring对Java的...同时,结合日志和监控工具,我们可以实时查看线程池的状态,包括当前线程数、活跃线程数、任务队列长度等,以便于诊断和解决问题。
在Java开发中,统计高并发环境下首页访问量并记录客户登录信息是一项常见的需求,这涉及到系统性能优化、数据持久化以及并发控制等多个方面。在这个项目中,开发框架选择了Spring,这是一个广泛使用的Java企业级应用...
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(50); taskExecutor.setMaxPoolSize(100); taskExecutor.setQueueCapacity(1000); // 其他配置... return...
常见的`BlockingQueue`实现有`ArrayBlockingQueue`、`LinkedBlockingQueue`和`PriorityBlockingQueue`等。 在Spring MVC中,我们可以利用`BlockingQueue`来管理并发请求,比如在高并发环境下处理请求或者进行异步...
在Spring MVC框架中实现定时任务是一项常见的需求,特别是在企业级应用中,往往需要根据特定时间进行数据处理、报表生成或发送通知等操作。本篇将详细介绍如何在Spring MVC中配置和使用定时任务,并结合数据库中设置...
`ThreadPoolTaskScheduler`是其常见实现,它基于`ThreadPoolExecutor`。 3. **CronTrigger**: 在Spring中,我们经常用到`@Scheduled`注解配合cron表达式来实现按时间触发的任务。cron表达式是一种强大的定时表达...
在【标题】"Spring的定时任务开发及对Quartz和Timer支持"中,涉及到的是Spring在处理定时任务方面的特性,这在企业级应用中非常常见,用于执行一些周期性的后台任务,如数据同步、报表生成、清理任务等。 首先,...
2. **分布式锁**:分布式锁是多节点环境下确保数据一致性的重要工具,常见实现包括基于Zookeeper、Redis或数据库的锁机制。 3. **Nginx 请求转发**:Nginx可以通过负载均衡策略将请求转发至不同服务器,其中按权重...
19. **线程池选择**:Java的ExecutorService和Spring的ThreadPoolTaskExecutor是线程池实现。 20-21. **字符串格式化**和**时间格式化**:使用String.format()和SimpleDateFormat或DateTimeFormatter进行格式化。 ...
在Spring框架中,定时任务是应用开发中常见的一种需求,比如定期执行数据清理、日志备份等操作。Spring 3.1版本引入了强大的定时任务支持,它允许开发者使用XML配置或者注解来定义定时任务。这个压缩包包含了实现...
- **拒绝策略(Rejected Execution Handler)**:当线程池和队列都满时,处理新任务的策略,常见的策略有抛出异常、忽略任务、调用系统守护线程或自定义处理。 2. **线程池的创建与使用**: 使用`Executors`工厂...
- **Spring中实现多线程**:Spring提供了ThreadPoolTaskExecutor,可以通过配置来创建线程池。 - **使用定时器Timer**:用于定期执行任务,内部维护了一个线程。 6. **设计模式:简单工厂模式** 简单工厂模式是...
此外,Spring Task还允许你配置一个`TaskScheduler`实例来实现更高级的调度策略,或者使用`ThreadPoolTaskExecutor`来并行执行多个任务,以提高系统效率。 结合使用Spring的Listener和Task,我们可以构建出强大的...