为了账号安全,请及时绑定邮箱和手机立即绑定

java - 如何在java中设置等待/睡眠的超时阈值?

java - 如何在java中设置等待/睡眠的超时阈值?

青春有我 2021-06-29 08:06:22
我的任务很简单,使用 selenium 从 url 下载文件。我一直在点击下载部分。现在我想等到文件下载完毕。很好。我使用以下并完成。do {    Thread.sleep(60000);}while ((downloadeBuild.length()/1024) < 138900);现在的挑战是我要等多久?我可以设置一些阈值吗?我能想到的是在 do while 中使用计数器并检查直到计数器变为 10 或类似的东西?但是在 Java 中还有其他方式吗?因此,在下载文件之前,我没有任何操作要做。
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

这个怎么样?


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


您可以转为CompletableFutureusingsupplyAsync进行下载并用于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";

    }

}


查看完整回答
反对 回复 2021-07-14
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

如果您想要的是超时练习,您可以尝试以下代码:


    long timeout = 10 * 60 * 1000;

    long start = System.currentTimeMillis();

    while(System.currentTimeMillis() - timeout <= start ){

        //Not timeout yet, wait

    }

    //Time out, continue

这在java库中很常见。


查看完整回答
反对 回复 2021-07-14
  • 3 回答
  • 0 关注
  • 220 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信