usar tiempo retrasar programa lineas fila esperar espera ejecuciĆ³n como aplicar java timeout timeoutexception

retrasar - Tiempo de espera simple en java



programa en java lineas de espera (3)

El ejemplo 1 no se compilará. Esta versión se compila y ejecuta. Utiliza características lambda para abreviarlo.

/* * [RollYourOwnTimeouts.java] * * Summary: How to roll your own timeouts. * * Copyright: (c) 2016 Roedy Green, Canadian Mind Products, http://mindprod.com * * Licence: This software may be copied and used freely for any purpose but military. * http://mindprod.com/contact/nonmil.html * * Requires: JDK 1.8+ * * Created with: JetBrains IntelliJ IDEA IDE http://www.jetbrains.com/idea/ * * Version History: * 1.0 2016-06-28 initial version */ package com.mindprod.example; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import static java.lang.System.*; /** * How to roll your own timeouts. * Based on code at http://stackoverflow.com/questions/19456313/simple-timeout-in-java * * @author Roedy Green, Canadian Mind Products * @version 1.0 2016-06-28 initial version * @since 2016-06-28 */ public class RollYourOwnTimeout { private static final long MILLIS_TO_WAIT = 10 * 1000L; public static void main( final String[] args ) { final ExecutorService executor = Executors.newSingleThreadExecutor(); // schedule the work final Future<String> future = executor.submit( RollYourOwnTimeout::requestDataFromWebsite ); try { // where we wait for task to complete final String result = future.get( MILLIS_TO_WAIT, TimeUnit.MILLISECONDS ); out.println( "result: " + result ); } catch ( TimeoutException e ) { err.println( "task timed out" ); future.cancel( true /* mayInterruptIfRunning */ ); } catch ( InterruptedException e ) { err.println( "task interrupted" ); } catch ( ExecutionException e ) { err.println( "task aborted" ); } executor.shutdownNow(); } /** * dummy method to read some data from a website */ private static String requestDataFromWebsite() { try { // force timeout to expire Thread.sleep( 14_000L ); } catch ( InterruptedException e ) { } return "dummy"; } }

¿Alguien me puede guiar sobre cómo puedo usar un simple tiempo de espera en java? Básicamente, en mi proyecto estoy ejecutando una declaración br.readLine() , que está leyendo una respuesta de un módem. Pero a veces el módem no responde. Para ello quiero añadir un timeout. Estoy buscando un código como:

try { String s= br.readLine(); } catch(TimeoutException e) { System.out.println("Time out has occurred"); }


Lo que buscas se puede encontrar here . Puede existir una forma más elegante de lograrlo, pero un enfoque posible es

Opción 1 (preferida):

final Duration timeout = Duration.ofSeconds(30); ExecutorService executor = Executors.newSingleThreadExecutor(); final Future<String> handler = executor.submit(new Callable() { @Override public String call() throws Exception { return requestDataFromModem(); } }); try { handler.get(timeout.toMillis(), TimeUnit.MILLISECONDS); } catch (TimeoutException e) { handler.cancel(true); } executor.shutdownNow();

Opcion 2:

final Duration timeout = Duration.ofSeconds(30); ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); final Future<String> handler = executor.submit(new Callable() { @Override public String call() throws Exception { return requestDataFromModem(); } }); executor.schedule(new Runnable() { @Override public void run(){ handler.cancel(true); } }, timeout.toMillis(), TimeUnit.MILLISECONDS); executor.shutdownNow();

Esos son solo un borrador para que puedas tener la idea principal.


Usa esta línea de código:

Thread.sleep(1000);

Dormirá durante 1 segundo.