阅读背景:

单线程大数据量保存方法:thread, 泛型,etc

来源:互联网 
只是一个简单的思路
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 适用于大数据量的导入操作
 * @author qth
 *
 */
public abstract class SingleThreadSaver {
	
	private Map<String, Long> countHolder = null;
	private List<String> errorMsgHolder = null;
	
	private static final String COUNT_KEY_SUCCESS = "success";
	private static final String COUNT_KEY_ERROR = "error";
	
	private SingleThreadSaverPool pool = null;
	
	public SingleThreadSaver() {
		countHolder = new HashMap<String, Long>();
		countHolder.put(COUNT_KEY_SUCCESS, 0L);
		countHolder.put(COUNT_KEY_ERROR, 0L);
		
		errorMsgHolder = new ArrayList<String>();
		
		pool = SingleThreadSaverPool.getInstance();
	}
	
	public List<String> getErrorMsgList() {
		List<String> ret = new ArrayList<String>();
		ret.addAll(errorMsgHolder);
		return ret;
	}
	
	protected synchronized void increaseSuccessCount() {
		countHolder.put(COUNT_KEY_SUCCESS, 
				countHolder.get(COUNT_KEY_SUCCESS) + 1);
	}
	
	public long getSuccessCount() {
		return countHolder.get(COUNT_KEY_SUCCESS);
	}
	
	protected synchronized void increaseErrorCount() {
		countHolder.put(COUNT_KEY_ERROR, 
				countHolder.get(COUNT_KEY_ERROR) + 1);
	}
	
	public long getErrorCount() {
		return countHolder.get(COUNT_KEY_ERROR);
	}
	
	protected void addErrorMsg(String msg) {
		errorMsgHolder.add(msg);
	}

	public void saveInSingleThread() {
		final Date now = new Date();
		
		new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					save();
				} catch(Exception e) {
					e.printStackTrace();
					addErrorMsg(e.getMessage());
					increaseErrorCount();
				} finally {
					try {
						pool.releaseSaver(SingleThreadSaver.this);
					} catch(Exception e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
	}
	
	
	/**
	 * 单线程执行体
	 */
	protected abstract void save();
}

import java.util.ArrayList;
impor



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: