解决方案 »
- 散分!简单的堆栈问题
- JAVA如何将文件夹复制到远端的WINDOWS服务器的某个路径下?
- hibernate 升级
- 有关spring2框架
- 求助 : 用struts的FormFile组建,上传文件到服务器
- 高手来看看一个关于ActionForm的问题
- JBuilderX+weblogic8.1+oracle9i,连接数据库出现的问题,恳请帮忙!!!
- Win2k下做j2eetutorial的例子时,运行客户端SavingsAccountApp.ear时出:NoClassDefFoundError:SavinsAccountHome.
- 关于部署ejb的疑问。
- 如何将两个list合并,合并后可以再页面分别取到两个List里面的值
- java 项目 新建了一个工程 然后在工程下建了个lib文件夹 然后把jar放进来 我记得以前可以直接右键 build path的
- 帮忙看看下面的实体类是怎么生成的?XML生成JAVA 实体类
2.没有看到你设置ExecutorService的核心进程与最大、最小进程数的限制,当大量任务存储进程池时可能会创建超出系统承受范围的进程数量。
3.你的定时器的用法有问题,根据你写的业务来看根本就没有用。你的taskQueue是每天0点时候才有的数据,而taskWorker每分钟执行的时候直接清空任务队列,这样推测一天你的定时器仅有一次触发是有效触发。 正确设计应该在addTask方法时直接executors.execute(nextTask);。取消定时器功能。
总结:
1.设置线程池的初始线程数、最小线程数、最大线程数。
2.取消掉start方法,取消该类中对定时器的使用。
3.检查确定每个task的执行时间与系统计算资源情况并调整线程池的相关参数。
4.你自己的queue变量在这么改后也没有用了。
非常感谢你的详细分析。请再帮我解答下心中的疑惑,非常感谢
如果我取消了定时器的使用,一次过来了2000个任务是不是由线程池来负责任务调度,会不会因为阻塞过多出问题。
把定时器里添加任务的代码放到addTask中的话就是由线程池来调度运行。至于阻塞问题,如果你的task是线程安全的,且不需要和其他Task竞争的话是不会有问题的,线程池会按顺序来排列Task的运行。