只是一个简单的思路
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