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.
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 .