首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Callable多线程有关问题,求高手解答!多谢

2012-09-04 
Callable多线程问题,求高手解答!谢谢。创建了5个线程处理4.5W条数据入库操作, 给这每个线程处理1W条,当5个

Callable多线程问题,求高手解答!谢谢。
创建了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 "";
}

热点排行