首页 > 解决方案 > java - 如何在java中设置等待/睡眠的超时阈值?

问题描述

我的任务很简单,就是使用 selenium 从 url 下载文件。我一直这样做,直到点击下载部分。现在我想等到文件下载完毕。很好。我使用以下并完成。

do {
    Thread.sleep(60000);
}
while ((downloadeBuild.length()/1024) < 138900);

现在的挑战是我要等多久?我可以设置一些阈值吗?我能想到的是在do while中使用一个计数器并检查直到计数器变为10或类似的东西?但在 Java 中还有其他方式吗?因此,在下载文件之前,我没有任何操作要做。

标签: javaselenium

解决方案


这个怎么样?

我认为使用TimeOut不稳定,因为无需等待不可预测的下载操作。

您可以通过以下方式转向CompletableFuture使用supplyAsync进行下载和使用thenApply进行处理/转换并检索结果join

public class SimpleCompletableFuture {
    public static void main(String... args) {
        testDownload();
    }

    private static void testDownload() {
        CompletableFuture future = CompletableFuture.supplyAsync(() -> downloadMock())
                .thenApply(SimpleCompletableFuture::processDownloaded);
        System.out.println(future.join());
    }

    private static String downloadMock() {
        try {
            Thread.sleep(new Random().nextInt() + 1000); // mock the downloading time;
        } catch (InterruptedException ignored) {
            ignored.printStackTrace();
        }
        return "Downloaded";
    }

    private static String processDownloaded(String fileMock) {
        System.out.println("Processing " + fileMock);
        System.out.println("Done!");
        return "Processed";
    }
}

推荐阅读