在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);
        }
    }
}