diff -r c87df8b1f55e test/java/lang/management/ThreadMXBean/MonitorDeadlock.java
--- a/test/java/lang/management/ThreadMXBean/MonitorDeadlock.java	Thu Nov 15 15:40:03 2012 -0800
+++ b/test/java/lang/management/ThreadMXBean/MonitorDeadlock.java	Tue Nov 27 13:12:02 2012 +0200
@@ -33,22 +33,25 @@
 
 public class MonitorDeadlock {
 
-    private final int EXPECTED_THREADS = 3;
+    private final int ALL_THREADS = 4;
+    private final int DEADLOCKED_THREADS = 3;
     private Barrier go = new Barrier(1);
-    private Barrier barr = new Barrier(EXPECTED_THREADS);
+    private Barrier barr = new Barrier(ALL_THREADS);
 
     private Object a = new Object();
     private Object b = new Object();
     private Object c = new Object();
-    private Thread[] dThreads = new Thread[EXPECTED_THREADS];
+    private Object d = new Object();
+    private DeadlockingThread[] dThreads = new DeadlockingThread[ALL_THREADS];
 
     public MonitorDeadlock() {
-        dThreads[0] = new DeadlockingThread("MThread-1", a, b);
-        dThreads[1] = new DeadlockingThread("MThread-2", b, c);
-        dThreads[2] = new DeadlockingThread("MThread-3", c, a);
+        dThreads[0] = new DeadlockingThread("MThread-1", a, b, true);
+        dThreads[1] = new DeadlockingThread("MThread-2", b, c, true);
+        dThreads[2] = new DeadlockingThread("MThread-3", c, a, true);
+        dThreads[3] = new DeadlockingThread("MThread-4", d, a, false);
 
         // make them daemon threads so that the test will exit
-        for (int i = 0; i < EXPECTED_THREADS; i++) {
+        for (int i = 0; i < ALL_THREADS; i++) {
             dThreads[i].setDaemon(true);
             dThreads[i].start();
         }
@@ -59,9 +62,9 @@
         barr.await();
 
         // reset for later signals
-        barr.set(EXPECTED_THREADS);
+        barr.set(ALL_THREADS);
 
-        while (go.getWaiterCount() != EXPECTED_THREADS) {
+        while (go.getWaiterCount() != ALL_THREADS) {
             synchronized(this) {
                 try {
                     wait(100);
@@ -107,11 +110,13 @@
     private class DeadlockingThread extends Thread {
         private final Object lock1;
         private final Object lock2;
+        private final boolean deadlocked;
 
-        DeadlockingThread(String name, Object lock1, Object lock2) {
+        DeadlockingThread(String name, Object lock1, Object lock2, boolean deadlocked) {
             super(name);
             this.lock1 = lock1;
             this.lock2 = lock2;
+            this.deadlocked = deadlocked;
         }
         public void run() {
             f();
@@ -129,14 +134,20 @@
                 throw new RuntimeException("should not reach here.");
             }
         }
+        public boolean isDeadlocked() {
+            return deadlocked;
+        }
     }
 
     void checkResult(long[] threads) {
-        if (threads.length != EXPECTED_THREADS) {
+        if (threads.length != DEADLOCKED_THREADS) {
             throw new RuntimeException("Expected to have " +
-                EXPECTED_THREADS + " to be in the deadlock list");
+                DEADLOCKED_THREADS + " to be in the deadlock list, but actual is " + threads.length + " " + Arrays.toString(threads));
         }
-        boolean[] found = new boolean[EXPECTED_THREADS];
+        boolean[] found = new boolean[ALL_THREADS];
+        for (int j = 0; j < dThreads.length; j++) {
+            found[j] = !dThreads[j].isDeadlocked();
+        }
         for (int i = 0; i < threads.length; i++) {
             for (int j = 0; j < dThreads.length; j++) {
                 if (dThreads[j].getId() == threads[i]) {
diff -r c87df8b1f55e test/java/lang/management/ThreadMXBean/SynchronizerDeadlock.java
--- a/test/java/lang/management/ThreadMXBean/SynchronizerDeadlock.java	Thu Nov 15 15:40:03 2012 -0800
+++ b/test/java/lang/management/ThreadMXBean/SynchronizerDeadlock.java	Tue Nov 27 13:12:02 2012 +0200
@@ -37,18 +37,21 @@
     private Lock a = new ReentrantLock();
     private Lock b = new ReentrantLock();
     private Lock c = new ReentrantLock();
-    private final int EXPECTED_THREADS = 3;
-    private Thread[] dThreads = new Thread[EXPECTED_THREADS];
+    private Lock d = new ReentrantLock();
+    private final int ALL_THREADS = 4;
+    private final int DEADLOCKED_THREADS = 3;
+    private DeadlockingThread[] dThreads = new DeadlockingThread[ALL_THREADS];
     private Barrier go = new Barrier(1);
-    private Barrier barr = new Barrier(EXPECTED_THREADS);
+    private Barrier barr = new Barrier(ALL_THREADS);
 
     public SynchronizerDeadlock() {
-        dThreads[0] = new DeadlockingThread("Deadlock-Thread-1", a, b);
-        dThreads[1] = new DeadlockingThread("Deadlock-Thread-2", b, c);
-        dThreads[2] = new DeadlockingThread("Deadlock-Thread-3", c, a);
+        dThreads[0] = new DeadlockingThread("Deadlock-Thread-1", a, b, true);
+        dThreads[1] = new DeadlockingThread("Deadlock-Thread-2", b, c, true);
+        dThreads[2] = new DeadlockingThread("Deadlock-Thread-3", c, a, true);
+        dThreads[3] = new DeadlockingThread("Deadlock-Thread-4", d, a, false);
 
         // make them daemon threads so that the test will exit
-        for (int i = 0; i < EXPECTED_THREADS; i++) {
+        for (int i = 0; i < ALL_THREADS; i++) {
             dThreads[i].setDaemon(true);
             dThreads[i].start();
         }
@@ -59,9 +62,9 @@
         barr.await();
 
         // reset for later signals
-        barr.set(EXPECTED_THREADS);
+        barr.set(ALL_THREADS);
 
-        while (go.getWaiterCount() != EXPECTED_THREADS) {
+        while (go.getWaiterCount() != ALL_THREADS) {
             synchronized(this) {
                 try {
                     wait(100);
@@ -107,11 +110,13 @@
     private class DeadlockingThread extends Thread {
         private final Lock lock1;
         private final Lock lock2;
+        private final boolean deadlocked;
 
-        DeadlockingThread(String name, Lock lock1, Lock lock2) {
+        DeadlockingThread(String name, Lock lock1, Lock lock2, boolean deadlocked) {
             super(name);
             this.lock1 = lock1;
             this.lock2 = lock2;
+            this.deadlocked = deadlocked;
         }
         public void run() {
             f();
@@ -131,15 +136,21 @@
             lock2.lock();
             throw new RuntimeException("should not reach here.");
         }
+        public boolean isDeadlocked() {
+            return deadlocked;
+        }
     }
 
     void checkResult(long[] threads) {
-        if (threads.length != EXPECTED_THREADS) {
+        if (threads.length != DEADLOCKED_THREADS) {
             ThreadDump.threadDump();
             throw new RuntimeException("Expected to have " +
-                EXPECTED_THREADS + " to be in the deadlock list");
+                DEADLOCKED_THREADS + " to be in the deadlock list, but actual is " + threads.length + " " + Arrays.toString(threads));
         }
-        boolean[] found = new boolean[EXPECTED_THREADS];
+        boolean[] found = new boolean[ALL_THREADS];
+        for (int j = 0; j < dThreads.length; j++) {
+            found[j] = !dThreads[j].isDeadlocked();
+        }
         for (int i = 0; i < threads.length; i++) {
             for (int j = 0; j < dThreads.length; j++) {
                 if (dThreads[j].getId() == threads[i]) {
