java 线程循环读取数据库

juor 发布于 2015/09/27 23:00
阅读 632
收藏 0
最近项目数据库量大,现需要实现用一个线程循环(for)读取库中记录且每次只读取200条,语言java数据库mysql
加载中
1
mycms2013
mycms2013

我之前有一个做法就写一个定时器。20秒中执行一次。然后去判断线程池的数量。如果线程池空闲就继续去读数据库。如果线程池中的线程没处理完。就继续处理。等下一个20秒再去判断。

/**
	 * 截至时间20150922
	 */
	private int totalPages = 6778;
	// 每20秒执行一次
	@Scheduled(cron="*/20 * * * * ?")
	public void myTest() {
		System.out.println("=============================================");
		System.out.println("ActiveCount :"+taskExecutor.getActiveCount());
		System.out.println("PoolSize :"+taskExecutor.getPoolSize());
		System.out.println("CorePoolSize :"+taskExecutor.getCorePoolSize());
		System.out.println("=============================================");
		
		if(taskExecutor.getActiveCount()<10){
			System.out.println("当前页:"+page);
			if(page<=totalPages){
				for (int i = page; i < page+5; i++) {
					taskExecutor.execute(new crawlTask(i,jobPhotosDAO,storageService));
				}
				page=page+5;
			}else {
				logger.info("抓取页码结束 {}",page);
			}
		}
	}



juor
juor
多谢,非常好
0
车开源
车开源
思路都有了,还缺什么?
juor
juor
思路
0
mycms2013
mycms2013
你循环去读数据库是没有问题的.但是你能保证你内存足够大么。再说你数据读出来。一般是需要对数据进行处理。所以你需要用多线程来操作。而且还要保证你线程的数量趋于一个稳定值。等处理完前面1000(比如)条。然后再继续去数据库读。然后再处理.而不是一直循环读出来的.超过1000w条数据。你直接循环去读.你服务器cpu占用率会非常高和内存都撑不住。导致你服务器崩溃。
返回顶部
顶部