使用Java批量上传到Box *

时间:2019-01-11 21:28:05

标签: java multithreading performance parallel-processing box-api

在将文件上传到Box时,我遇到了一些性能问题。我需要上传约50000张图片。我怀疑这可能是因为我要一个接一个地上传它们。因此,我想到尝试批量上传进行上传。以下是我的代码段:

scanf("%59s", name);

我还没有测试过。如果列表大小为100,它将开始将图像上传到Box,但也会停止在同一侧生成图像。

我可以创建两个线程。一个将生成图像,另一个将上传图像。但是,在我的上传图像块中,我还将列表设置为空,这将在所有100张图像都上传完之后发生。但是,如果我等待所有100张图像上传,然后开始生成下一组图像(因为我正在清除列表并将其初始化为空),则没有使用多个线程的可能性。

我应该有两个列表吗? Thread1将生成前100个图像。完成后,Thread2将开始开始上传,同时第一个线程将开始生成另一组图像到列表2,依此类推。

让我知道它是否令人困惑。我可以进一步解释。谢谢!

1 个答案:

答案 0 :(得分:1)

我会尝试并行上传图像。使用多个并行连接时,通过Internet的传输效果更好。

我对Box API并不熟悉,但是快速检查发现它确实为large file uploads使用了线程池,因此应该可以这样:

final int numberOfParallelUploads = 5;
ExecutorService pool = Executors.newFixedThreadPool(numberOfParallelUploads);
final BoxFolder boxFolder = BoxFolder.getRootFolder(boxApi);
for (/* each input file */) {
    final String fileName = /* get next file to upload */;
    pool.execute(() -> {
        try (InputStream is = new FileInputStream(fileName)) {
            boxFolder.uploadFile(is, fileName);
        }
    });
}
pool.shutdown();
pool.awaitTermination(2, TimeUnit.HOURS); // absolute timeout for uploading all the files
相关问题