Pages

Monday, 28 January 2013

Multithreading Interview Questions

  1. The static class lock is independent of the object lock
  2. wait is called from synchronized context only while sleep can be called without synchronized block. see Why wait and notify needs to call from synchronized method for more detail.

    2) wait is called on Object while sleep is called on Thread. see Why wait and notify are defined in object class instead of Thread.

    3) waiting thread can be awake by calling notify and notifyAll while sleeping thread can not be awaken by calling notify method.

    4) wait is normally done on condition, Thread wait until a condition is true while sleep is just to put your thread on sleep.

    5) wait release lock on object while waiting while sleep doesn’t release lock while waiting
  3. Major difference between yield and sleep in Java is that yield() method pauses the currently executing thread temporarily for giving a chance to the remaining waiting threads of the same priority to execute. If there is no waiting thread or all the waiting threads have a lower priority then the same thread will continue its execution. The yielded thread when it will get the chance for execution is decided by the thread scheduler whose behavior is vendor dependent. Yield method doesn’t guarantee  that current thread will pause or stop but it guarantee that CPU will be relinquish by current Thread as a result of call to Thread.yield() method in java.

    Sleep method in Java has two variants one which takes millisecond as sleeping time while other which takes both mill and nano second for sleeping duration.

    sleep(long millis)
    or
    sleep(long millis,int nanos)
  4. Yield will send the thread from the Running state to the Ready to run state. This is the place where the thread first comes and waits after the call on the start method. Then the scheduler picks up the thread and allows it to run
  5. 1) Thread.sleep() method is used to pause the execution, relinquish the CPU and return it to thread scheduler.

    2) Thread.sleep() method is a static method and always puts current thread on sleep.

    3) Java has two variants of sleep method in Thread class one with one argument which takes milliseconds as duration for sleep and other method with two arguments one is millisecond and other is nanosecond.

    4) Unlike wait() method in Java, sleep() method of Thread class doesn't relinquish the lock it has acquired.

    5) sleep() method throws Interrupted Exception if another thread interrupt a sleeping thread in java.

    6) With sleep() in Java its not guaranteed that when sleeping thread woke up it will definitely get CPU, instead it will go to Runnable state and fight for CPU with other thread.

    7) There is a misconception about sleep method in Java that calling t.sleep() will put Thread "t" into sleeping state, that's not true because Thread.sleep method is a static method it always put current thread into Sleeping state and not thread "t".

No comments:

Post a Comment