Java SFTP中每个文件的线程

Java SFTP中每个文件的线程,java,multithreading,jersey,sftp,Java,Multithreading,Jersey,Sftp,我在SFTP服务器中读取文件并进行一些处理,问题是我的代码一个文件一个文件地运行,每个文件需要4到6个小时,我可以使用线程同时运行每个文件吗 这是我在函数中的代码 sftpChannel = (ChannelSftp) channel; sftpChannel.cd("/upload"); Vector filelist = sftpChannel.ls("/upload/test"); List<St

我在SFTP服务器中读取文件并进行一些处理,问题是我的代码一个文件一个文件地运行,每个文件需要4到6个小时,我可以使用线程同时运行每个文件吗

这是我在函数中的代码

        sftpChannel = (ChannelSftp) channel;
            sftpChannel.cd("/upload");
            Vector filelist = sftpChannel.ls("/upload/test");
            List<String> fileNameList = new ArrayList<String>();
            String fileName = null;
            for (int i = 0; i < filelist.size(); i++) {
                ChannelSftp.LsEntry entry = (ChannelSftp.LsEntry) filelist.get(i);
                if (entry.getFilename().startsWith("test")) {
                    fileName = entry.getFilename();
                    fileNameList.add(fileName);
                }

            }
            if (fileNameList != null && !fileNameList.isEmpty()) {
                for (int i = 0; i < fileNameList.size(); i++) {
                    fileSFTP = sftpChannel.get("/upload/test/" + fileNameList.get(i));
                    renamedFile = fileNameList.get(i);

                    // Open the file
                    String filename = "OTL";
                    File file = File.createTempFile(filename, ".zip");

                    // write the inputStream to a FileOutputStream
                    outputStream
                            = new FileOutputStream(file);

                    int read = 0;
                    byte[] bytes = new byte[2056];

                    while ((read = fileSFTP.read(bytes)) != -1) {
                        outputStream.write(bytes, 0, read);
                    }

                    if (file == null) {
                        return null;
                    }
                    JAXBContext jaxbContext = JAXBContext.newInstance(Message.class);

                    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
                    itemObj = (Message) jaxbUnmarshaller.unmarshal(file);
                    buildJsonRequest(itemObj);
                    sftpChannel.rename("/upload/test/" + renamedFile,
                            "/upload/Loaded Test/" + renamedFile);
                    sftpChannel.cd("/upload/");
sftpChannel=(ChannelSftp)通道;
sftpChannel.cd(“/upload”);
Vector filelist=sftpChannel.ls(“/upload/test”);
List fileNameList=new ArrayList();
字符串文件名=null;
对于(int i=0;i
是的,你可以。为什么你不能?但我很难理解从SFTP服务器复制文件到本地驱动器可能需要4到6个小时。它们是如此巨大吗?如果是磁盘或网络让你速度变慢,多线程可能不会带来任何好处。谢谢你的回答,是的,每个文件中的数据都是巨大的,处理此问题的最佳方法是什么?@JBNizetIt取决于性能瓶颈是什么。是本地磁盘?本地网络速度?远程服务器磁盘?远程服务器网络?您与ISP的连接?您是从很远的地方检索文件吗?根据答案,使用少量线程可能会有所帮助。或者它会导致ght的影响很小。@StephenC是正确的。当带宽、磁盘或整个CPU成为瓶颈时,线程不会有帮助。如果网络延迟或CPU核心性能成为瓶颈,线程可以提供帮助。另请参阅