Source Code : DeadLock Detector 2

Java Is Open Source Programming Language You Can Download From Java and Java Libraries From http://www.oracle.com. Click Here to download
We provide this code related to title for you to solve your developing problem easily. Libraries which is import in this program you can download from http://www.oracle.com. Click Here or search from google with Libraries Name you get jar file related it

DeadLock Detector 2

 
/**
 * This file is part of aion-emu <aion-emu.com>.
 *
 *  aion-emu is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  aion-emu is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with aion-emu.  If not, see <http://www.gnu.org/licenses/>.
 */
//package com.aionemu.commons.utils;

import java.lang.management.LockInfo;
import java.lang.management.ManagementFactory;
import java.lang.management.MonitorInfo;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;


//import com.aionemu.commons.utils.ExitCode;

/**
 * @author -Nemesiss-
 */
public class DeadLockDetector extends Thread
{
  /** What should we do on DeadLock */
  public static final byte  NOTHING  = 0;
  /** What should we do on DeadLock */
  public static final byte  RESTART  = 1;

  /** how often check for deadlocks */
  private final int      sleepTime;
  /**
   * ThreadMXBean
   */
  private final ThreadMXBean  tmx;
  /** What should we do on DeadLock */
  private final byte      doWhenDL;

  /**
   * Create new DeadLockDetector with given values.
   * 
   * @param sleepTime
   * @param doWhenDL
   */
  public DeadLockDetector(int sleepTime, byte doWhenDL)
  {
    super("DeadLockDetector");
    this.sleepTime = sleepTime * 1000;
    this.tmx = ManagementFactory.getThreadMXBean();
    this.doWhenDL = doWhenDL;
  }

  /**
   * Check if there is a DeadLock.
   */
  @Override
  public final void run()
  {
    boolean deadlock = false;
    while (!deadlock)
    {
      try
      {
        long[] ids = tmx.findDeadlockedThreads();

        if (ids != null)
        {
          /** deadlock found :/ */
          deadlock = true;
          ThreadInfo[] tis = tmx.getThreadInfo(ids, true, true);
          String info = "DeadLock Found!
";
          for (ThreadInfo ti : tis)
          {
            info += ti.toString();
          }

          for (ThreadInfo ti : tis)
          {
            LockInfo[] locks = ti.getLockedSynchronizers();
            MonitorInfo[] monitors = ti.getLockedMonitors();
            if (locks.length == 0 && monitors.length == 0)
            {
              /** this thread is deadlocked but its not guilty */
              continue;
            }

            ThreadInfo dl = ti;
            info += "Java-level deadlock:
";
            info += "	" + dl.getThreadName() + " is waiting to lock " + dl.getLockInfo().toString() + " which is held by " + dl.getLockOwnerName()
                + "
";
            while ((dl = tmx.getThreadInfo(new long[]
            { dl.getLockOwnerId() }, true, true)[0]).getThreadId() != ti.getThreadId())
            {
              info += "	" + dl.getThreadName() + " is waiting to lock " + dl.getLockInfo().toString() + " which is held by "
                  + dl.getLockOwnerName() + "
";
            }
          }
          System.out.println(info);

          if (doWhenDL == RESTART)
          {
            System.exit(0);
          }
        }
        Thread.sleep(sleepTime);
      }
      catch (Exception e)
      {
        System.out.println(e);
      }
    }
  }
}

   
  

Thank with us