Callable多线程有关问题,求高手解答!多谢
Callable多线程问题,求高手解答!谢谢。
创建了5个线程处理4.5W条数据入库操作, 给这每个线程处理1W条,当5个线程中的一个线程运行结束时候,其他线程也不执行了。TOMCAT没死,程序其他操作还在执行,就是线程池中的其他4个线程不继续执行下去了。。。
线程操作类
调用类
------解决方案--------------------
hotelDao.modifyHotelEntity(hotelId);
是不是会更新一些共同资源?而死掉的线程因为锁住了某条记录没有释放,导致其他线程没法更新,必须等待死掉的线程释放锁
------解决方案--------------------
从所贴出来程序并没看出问题,必须更深层次的看看其它被调函数。
另外建议可以这样排查:
public Object call() throws Exception {
for (int i = 0; i < listHotelId.size(); i++) {
HotelEntity hotelId = (HotelEntity) listHotelId.get(i);
// hotelDao.modifyHotelEntity(hotelId); // 注释掉这句话,看看是否还会如此?
}
return "";
}
创建了5个线程处理4.5W条数据入库操作, 给这每个线程处理1W条,当5个线程中的一个线程运行结束时候,其他线程也不执行了。TOMCAT没死,程序其他操作还在执行,就是线程池中的其他4个线程不继续执行下去了。。。
线程操作类
- Java code
public class HotelDetailThread implements Callable { private static final Logger log = Logger.getLogger(HotelDetailThread.class); private HotelDao hotelDao; private List listHotelId; private String index; public HotelDetailThread(List listHotelId, String index,HotelDao hotelDao) { this.listHotelId = listHotelId; this.index = index; this.hotelDao = hotelDao; } public Object call() throws Exception { for (int i = 0; i < listHotelId.size(); i++) { HotelEntity hotelId = (HotelEntity) listHotelId.get(i); hotelDao.modifyHotelEntity(hotelId); // 执行更新操作 } return ""; } }
调用类
- Java code
ExecutorService pool = Executors.newCachedThreadPool(); for (int i = 1; i <= maxPage; i++) { PageListBean bean = new PageListBean(); bean.setCurrentPage(i); List pagerList = bean.getPaper(listStr, pageSize); Callable c = new HotelDetailThread(pagerList, i+"",hotelDao); pool.submit(c); } pool.shutdown();
------解决方案--------------------
hotelDao.modifyHotelEntity(hotelId);
是不是会更新一些共同资源?而死掉的线程因为锁住了某条记录没有释放,导致其他线程没法更新,必须等待死掉的线程释放锁
------解决方案--------------------
从所贴出来程序并没看出问题,必须更深层次的看看其它被调函数。
另外建议可以这样排查:
public Object call() throws Exception {
for (int i = 0; i < listHotelId.size(); i++) {
HotelEntity hotelId = (HotelEntity) listHotelId.get(i);
// hotelDao.modifyHotelEntity(hotelId); // 注释掉这句话,看看是否还会如此?
}
return "";
}