Llueve, llueve, y mientras nos mojamos como tontos. LLueve, llueve, y en un simple charco a veces nos ahogamos. (Llueve - Melendi)
In this post I am going to talk about one class that was first introduced in version 1.5, that I have used too much but talking with some people they said that they didn't know it exists. This class is TimeUnit.
TimeUnit class represents time durations at a given unit of granularity and also provides utility methods to convert to different units, and methods to perform timing delays.
TimeUnit is an enum with seven levels of granularity: DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS and SECONDS.
The first feature that I find useful is the convert method. With this method you can say good bye to typical:
private static final int FIVE_SECONDS_IN_MILLIS = 1000 * 5;
to something like:
long duration = TimeUnit.MILLISECONDS.convert(5, TimeUnit.SECONDS);
But also equivalent operations in a better readable method exist. For example the same conversion could be expressed as:
long duration = TimeUnit.SECONDS.toMillis(5);
The second really useful sets of operations are those related with stopping current thread.
For example you can sleep current thread with method:
TimeUnit.MINUTES.sleep(5);
instead of:
Thread.sleep(5*60*1000);
But you can also use it with join and wait with timeout.
Thread t = new Thread();
TimeUnit.SECONDS.timedJoin(t, 5);
So as we can see TimeUnit class is though in terms of expressiveness, you can do the same as you do previously but in a more fashionable way. Notice that you can also use static import and code will be even more readable.
Keep Learning,



