在Java中的可运行类构造函数中传递值
我希望有人能帮我找出下面的代码哪里出了问题在Java中的可运行类构造函数中传递值,java,multithreading,Java,Multithreading,我希望有人能帮我找出下面的代码哪里出了问题 public class CCFileImpl implements CCFileAbs { private LogMe logMe = null; private ExecutorService ccfileimpl_exsc = null; private CCProcessorImpl cProc = null; private DataUtil dUtil = null; public CCFileI
public class CCFileImpl implements CCFileAbs {
private LogMe logMe = null;
private ExecutorService ccfileimpl_exsc = null;
private CCProcessorImpl cProc = null;
private DataUtil dUtil = null;
public CCFileImpl() {
this.logMe = LogMe.getLogger();
if (dUtil == null) {
dUtil = new DataUtil();
}
}
@Override
public void getFilesForProcess() {
CCHeader cHead = null;
Future future = null;
String sPath = PropReader.getPropValue(PropReader.FILEDIR); //D:\samples\
int iCtr = 0;
ccfileimpl_exsc = Executors.newFixedThreadPool(Integer.parseInt(PropReader.getPropValue(PropReader.TPool_File)));
Date dToday = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Iterator iter = dUtil.getFilesForProcess(sdf.format(dToday)).iterator();
String sFileGroupName = "", sFileName = "";
String sId = null; //"testFiles";
while (iter.hasNext()) {
cHead = (CCHeader) iter.next();
sFileName = cHead.getsFileName(); //(String) iter.next();
sId = cHead.getsId();
sFileGroupName = sFileName + "_" + iCtr++;
dUtil.updTPDHDRStatusById(sId); //Interface utility class // <=== And also here, when trying to update the db
// nothing happened.
cProc = new CCProcessorImpl(sId, sFileGroupName, sPath, sFileName); // <=== Problem is here?
future = ccfileimpl_exsc.submit(cProc);
}
ccfileimpl_exsc.shutdown();
}
}
公共类CCFileImpl实现了CCFileAbs{
私有LogMe LogMe=null;
私有执行器服务ccfileimpl_exsc=null;
私有CCProcessorImpl cProc=null;
私有DataUtil dUtil=null;
公共CCFileImpl(){
this.logMe=logMe.getLogger();
如果(dUtil==null){
dUtil=newdatautil();
}
}
@凌驾
public void getFilesForProcess(){
CCHeader cHead=null;
Future=null;
字符串sPath=PropReader.getPropValue(PropReader.FILEDIR);/D:\samples\
国际卢旺达问题国际法庭=0;
ccfileimpl_exsc=Executors.newFixedThreadPool(Integer.parseInt(PropReader.getPropValue(PropReader.TPool_文件));
Date dToday=新日期();
SimpleDataFormat sdf=新的SimpleDataFormat(“MM/dd/yyyy”);
迭代器iter=dUtil.getFilesForProcess(sdf.format(dToday)).Iterator();
字符串sFileGroupName=“”,sFileName=“”;
字符串sId=null;//“testFiles”;
while(iter.hasNext()){
cHead=(CCHeader)iter.next();
sFileName=cHead.getsFileName();/(字符串)iter.next();
sId=cHead.getsId();
sFileGroupName=sFileName+“”+iCtr++;
dUtil.updTPDHDRStatusById(sId);//接口实用程序类//为什么不使用由ccfileimpl\u exsc.submit()返回的未来?
相反,您可以在提交作业后立即调用ccfileimpl\u exsc.shutdown()
,在作业完成之前将其杀死。检查输入源cHead
。一些日志记录可能会有所帮助。您是否尝试在将值传递到线程之前将其打印到控制台?查看它们是否正确。
public class CCProcessorImpl implements Runnable{
private CCFileParser rpsCCParser;
private ExecutorService ccprocimpl_exsc;
private static LogMe logMe;
private final String sGroupName;
private final String sId;
private final String sFileName;
@Override
public void run() {
this.parseFiles(sId, sFileName);
}
public CCProcessorImpl(String sId, String sGroupName, String sPath, String sFileName) {
this.logMe = LogMe.getLogger();
this.sId = sId;
this.sGroupName = sGroupName;
this.sFileName = sPath + sFileName;
}
public void parseFiles(String sId, String sFileName) {
try {
Future future = null;
rpsCCParser = new CCFileParser(sId, sFileName);
ArrayList aList = rpsCCParser.getFileContent();
String sGroupName = sId + "_";
ccprocimpl_exsc = Executors.newFixedThreadPool(Integer.parseInt(PropReader.getPropValue(PropReader.TPool_Content)));
int iStart = 0, iSize = 9, iEnd = iSize;
for (int iCtr = 0; iCtr <= ((aList.size() / 10) - 1); iCtr++, iStart += iSize, iEnd += iSize) {
future = ccprocimpl_exsc.submit(new CCUpdater(aList.subList(iStart, iEnd), sGroupName + iCtr));
}
future.get();
ccprocimpl_exsc.shutdown();
} catch (ExecutionException e) {
throw new RuntimeException(e);
} catch (InterruptedException ie) {
throw new RuntimeException(ie);
}
}
}