Friday, February 8, 2013

How to Avoid DeadLock in Mutithreading....??


Deadlock Scenario:
 public void method1(){
         synchronized(String.class){
             System.out.println("Aquired lock on String.class object");
             synchronized (Integer.class) {
                 System.out.println("Aquired lock on Integer.class object");
             }
         }
    }

    public void method2(){
        synchronized(Integer.class){
            System.out.println("Aquired lock on Integer.class object");
            synchronized (String.class) {
                ,System.out.println("Aquired lock on String.class object");
            }
        }
    }


No Deadlock Scenario:
 
    public void method1(){
        synchronized(Integer.class){
            System.out.println("Aquired lock on Integer.class object");
            synchronized (String.class) {
                System.out.println("Aquired lock on String.class object");
            }
        }
    }

    public void method2(){
        synchronized(Integer.class){
            System.out.println("Aquired lock on Integer.class object");
            synchronized (String.class) {
                System.out.println("Aquired lock on String.class object");
            }
        }
    }

So here we clearly sees that Consistent lock acquisition ordering prevents deadlock. That is the simplest and most efficient way to avoid deadlock is to ensure that resources are always acquired in some well-defined order.

No comments:

Post a Comment