Prefer TimeUnit Sleep over Thread.Sleep

What is TimeUnit in Java
TimeUnit in Java is a class on java.util.concurrent package, introduced in Java 5 along with  CountDownLatchCyclicBarrierSemaphore and several other concurrent utilities. TimeUnit provides a human readable version of Thread.sleep() method which can be used in place of former. From long time Thread's sleep() method is standard way to pause a  Thread in Java and almost every Java programmer is familiar with that. In fact sleep method itself is a very popular and has appeared on many Java interviews.  Difference between wait and sleep is one of the  tough Java question to answer. If you have used Thread.sleep() before and I am sure you do, you might be familiar with fact like it's an static method, it doesn't release lock when pausing Thread and it throws InterruptedException. But what many of us doesn't consider a potential issue is readability. Thread.sleep() is an  overloaded method and accept long millisecond and long nanosecond, which makes it hard for programmers to find out exactly how many seconds, minutes, hours or day current Thread is sleeping. Look at below example of Thread's sleep() method:

Thread.sleep(2400000);

By just having a cursory glance, can you figure out how long current Thread will  wait ? Some of you may be but its hardly readable for many Java programmer and you need to convert milliseconds further into seconds and then into minutes. Let's take a look on another example of Thread.sleep() method which is slightly more readable than previous example.

Thread.sleep(4*60*1000);

This is much better than previous one but still its not perfect and until you are aware that sleep times are in millisecond its not easy to guess that current Thread will wait for 4 minutes. TimeUnit class resolves this issue by providing indicator for DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS and NANOSECONDS. java.util.concurrent.TimeUnit is perfect example of powerful  Java Enum. All TimeUnit are Enum instances. Let's see how to sleep Thread for 4 minutes usingTimeUnit :

TimeUnit.MINUTES.sleep(4);  // sleeping for 1 minutes

Similarly you can introduce pauses on seconds, minutes and hour level. By looking this code you can find out that, this is much more  readable than Thread's sleep method. Remember that TimeUnit.sleep() internally calls Thread.sleep() for sleeping and throws InterruptedException. You can also check JDK code to verify that. Here is a sample code example which demonstrate  how to use TimeUnit's sleep() method in Java.

/**
 *
 * Java program to demonstrate how to use TimeUnit.sleep() method in Java.
 * TimeUnit is a new way of introducing pause in Java program.
 * @author Javin
 */

public class TimeUnitTest  {

     public static void main ( String args [])  throws InterruptedException  {

         System. out. println ( "Sleeping for 4 minutes using Thread.sleep()" ) ;
         Thread. sleep ( 4  *  60  *  1000 ) ;
         System. out. println ( "Sleeping for 4 minutes using TimeUnit sleep()" ) ;
      
         TimeUnit. SECONDS. sleep ( 4 ) ;
         TimeUnit. MINUTES. sleep ( 4 ) ;
         TimeUnit. HOURS. sleep ( 1 ) ;
         TimeUnit. DAYS. sleep ( 1 ) ;
     }
}


Apart from sleep() functionality, TimeUnit also provide convenient method to  convert time into different Unit. For example if you want to convert seconds into milliseconds than you can use following code :

TimeUnit.SECONDS.toMillis(44)

It will return 44,000. It's readable and convenient way to convert time into different unites e.g. micro seconds, Milli seconds etc.

TimeUnit vs Thread.sleep()

What is TimeUnit class in Java programmingSo far we have discussed benefit of using TimeUnit to improve readability but some time it turns out other way as well. Since Thread.sleep() is been around for years, almost every  Java programmer knows about it and by looking Thread.sleep() they come to know that Thread is going to pause. This is not true with TimeUnit class, with two reason first its not very popular at least compare to Thread.sleep() and second it's not in Thread class, much like  wait and notify which are also not in Thread class.. Anyway none of these are big issues and it will take some time to be adopted and become an standard way, given the size of Java community around the world.

In Summary prefer TimeUnit.sleep() method if you would like to introduce short pause in your program and other places where you think of Thread.sleep(). It not only improves readability of code but also makes you familiar with java.util.concurrent package, which is key API for concurrent programming in Java.


Read more:  http://javarevisited.blogspot.com/2012/11/What-is-timeunit-sleep-over-threadsleep.html#ixzz2liEWl6Aw
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值