Como definir um limite de tempo limite para esperar / sono em java?

Mandar Kale:

Minha tarefa é simples para baixar um arquivo de uma url usando selênio. Eu fiz até clicar na parte download. Agora eu quero esperar até que o arquivo é downloaded.Fine. Eu uso seguinte e feito.

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

Agora desafio é por quanto tempo posso esperar? Posso definir um limite? Eu posso pensar é usar um contador em fazer enquanto e verificação até balcão vai para 10 ou algo assim? Mas nenhuma outra maneira em Java? Como tal, eu não tenho qualquer ação para fazer até que o arquivo é baixado.

senhores:

Que tal agora?

Acho que usando TimeOutnão é estável, pois não há necessidade de esperar por um un-previsível operação de download.

Você pode simplesmente virar a CompletableFutureusar supplyAsyncpara fazer o download e usar thenApplypara fazer o processamento / conversão e recuperar o resultado por joincomo segue:

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";
    }
}

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=119156&siteId=1
Recomendado
Clasificación