Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

283
Vistas
Implementación de DelayQueue en Java

Soy un principiante en la comprensión de subprocesos y paquetes de concurrencia. Entendí que para usar java.util.concurrent.DelayedQueue tenemos que implementar la interfaz java.util.concurrent.Delayed y tiene un método abstracto getDelay()

 long getDelay(TimeUnit unit)

Devuelve el retraso restante asociado con este objeto, en la unidad de tiempo dada.

 @Override public long getDelay(TimeUnit unit) { long diff = startTime - System.currentTimeMillis(); // long variable return unit.convert(diff, TimeUnit.MILLISECONDS); // Not clear about this part which also returns long }

Todo lo que hace getDelay es obtener la diferencia de milisegundos que creo que obtenemos de la variable diff anterior, entonces, ¿por qué necesitamos usar el método de conversión? El método de conversión dice que la diferencia debe convertirse a milisegundos (¿Por qué necesita convertirse cuando ya está en milisegundos). TimeUnit es solo para especificar que se convierta a milisegundos si mi comprensión no es incorrecta. ¿Alguien puede ayudarme a entender más sobre este tema?

EDITAR-1

diff contiene una diferencia de milisegundos y se imprime en la siguiente consola de captura de pantalla. Intenté usar el método de conversión de Timeunit y también imprimí en la consola a continuación, que son exactamente iguales y tienen un tipo de datos largo. Cuando ambos valores son iguales y de tipo de datos largo, ¿por qué necesito usar esta línea adicional de

 unit.convert(diff, TimeUnit.MILLISECONDS);

en su lugar, también podría devolver la diferencia directamente sin usar el método de conversión.

Captura de pantalla de la consola

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

la unit es proporcionada por la persona que llama a getDelay() . La implementación debe devolver el retraso en la unidad de tiempo especificada por unit .

Por lo tanto, unit.convert(diff, TimeUnit.MILLISECONDS) convierte diff , que se expresa en TimeUnit.MILLISECONDS , en unit .

TimeUnit.MILLISECONDS se refiere a lo que es diff . diff luego se convierte de TimeUnit.MILLISECONDS a unit .

Tenga en cuenta que también debe implementar compareTo() de Comparable , que Delayed extiende.


El parámetro de la unit no es fijo. Lo proporciona la persona que llama al método, por lo que puede variar. Puede ser TimeUnit.MILLISECONDS o TimeUnit.SECONDS o cualquier otro valor de enumeración. Es por eso que necesita usar el método de convert .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda