假设创建了15个core size的固定大小线程池。
ThreadPoolExecutor discoveryPool = (ThreadPoolExecutor) Executors
.newFixedThreadPool(15);发现,在跑的过程中,run线程因为异常报错, 结果 core size线程数也降了下来。不再是15个core size了。
请教这种情况应该如何避免?
ThreadPoolExecutor discoveryPool = (ThreadPoolExecutor) Executors
.newFixedThreadPool(15);发现,在跑的过程中,run线程因为异常报错, 结果 core size线程数也降了下来。不再是15个core size了。
请教这种情况应该如何避免?
解决方案 »
- oracle数据库完整导入到sql server java代码
- 运行javac时,出现不是内部或外部命令,也不是可运行的程序或批处理文件
- tomcat启动遇到的问题,怎么解决啊!!!!!!???
- 求前端分页组建
- 启动OC4J时发生致命错误:Cannot instantiate ApplicationServerThread AND not in embedded mode
- ★★★ 网站开通,600分赠送!(分六次)★★★
- 【郁闷!测试 Struts 例子不成功! 救命~~】
- CMP中的findAll()问题?
- SSI框架问题
- 使用springmvc controller怎么能做到获得请求来源地址,完成操作后跳回这个地址
- 如何在jsp中吧动态生成的数据导入excel
- 在线求救,等解决后下班;项目已经上线很久了,今天六点半的时候突然出现异常,事务回滚,
最后用discoveryPool.getCorePoolSize()得到的值还是10
暂时只想到如果为了保证coresize不会因为异常而减少,从而保证并发数足够用,只好在 ThreadPoolExecutor.execute(Runnable command) 传的Runnable 的run方法,整个用 try{}catch()包裹了。
不管有没有异常,main 方法一直都没结束,除非调用discoveryPool.shutdown()不管有没有异常,我这里貌似coresize没减少,即使异常了,后边会继续创建,再执行。
.newFixedThreadPool(15);
for (int i = 0; i < 100; i++) {
discoveryPool.execute(new Thread() {
@Override
public void run() {
int j = 0;
System.out.println(1 / j);// 抛runtimeexception }
});
}你试试这段测试代码。