Créer un dead lock

Aller en bas

Créer un dead lock Empty Créer un dead lock

Message  Gus le Dim 9 Déc - 18:08

Afin d'étudier le phénomène du dead lock (et de tester d'éventuels outils graphiques pour le détecter), il peut être intéressant de savoir en générer.
Voici donc un bout de code très simple qui créer deux threads et s'arrange pour les mettre en situation de deadlock :

Code:
   public static void deadLock()
   {
      Object lock1 = new Object();
      Object lock2 = new Object();
      
      Runnable r1 = new Runnable1(lock1,lock2);
      Runnable r2 = new Runnable1(lock2,lock1);

      Thread t1 = new Thread(r1,"DEADLOCKED1");
      Thread t2 = new Thread(r2,"DEADLOCKED2");
      
      t1.start();
      t2.start();
   }
   
   private static class Runnable1 implements Runnable
   {   
      private Object lock1;
      private Object lock2;
      
      public Runnable1(Object lock1, Object lock2)
      {
         this.lock1 = lock1;
         this.lock2 = lock2;
      }

      public void run()
      {
         synchronized (lock1)
         {
            try{TimeUnit.MILLISECONDS.sleep(50);}
            catch(InterruptedException ignore){}
            synchronized (lock2) {}
         }
      }
   }

Lorsque ce code est exécuté dans une de mes applis, voici ce qui arrive dans ma console de surveillance de threads ...

Créer un dead lock Deadlock
Gus
Gus
Admin

Messages : 249
Date d'inscription : 01/09/2009

Voir le profil de l'utilisateur http://www.gus05.com

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum