jdk/test/java/lang/management/ThreadMXBean/SynchronizationStatistics.java
author jbachorik
Fri, 30 Jan 2015 22:01:32 +0100
changeset 28857 20499c662815
parent 25181 216e0899f503
child 30376 2ccf2cf7ea48
permissions -rw-r--r--
8071641: java/lang/management/ThreadMXBean/SynchronizationStatistics.java intermittently failed with NPE Reviewed-by: sjiang, dfuchs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
/*
28857
20499c662815 8071641: java/lang/management/ThreadMXBean/SynchronizationStatistics.java intermittently failed with NPE
jbachorik
parents: 25181
diff changeset
     2
 * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
90ce3da70b43 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
90ce3da70b43 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     8
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
90ce3da70b43 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
90ce3da70b43 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
90ce3da70b43 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
90ce3da70b43 Initial load
duke
parents:
diff changeset
    14
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
90ce3da70b43 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    18
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    21
 * questions.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    22
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    23
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
/*
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
 * @test
90ce3da70b43 Initial load
duke
parents:
diff changeset
    26
 * @bug     4530538
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
 * @summary Basic unit test of the synchronization statistics support:
90ce3da70b43 Initial load
duke
parents:
diff changeset
    28
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    29
 * @author  Mandy Chung
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    30
 * @author  Jaroslav Bachorik
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    31
 *
19814
77d0468c8874 8004179: Few of test/java/lang/management/ThreadMXBean/* tests don't clean up the created threads
jbachorik
parents: 5506
diff changeset
    32
 * @run main/othervm SynchronizationStatistics
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    33
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    34
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
import java.lang.management.*;
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    36
import java.util.concurrent.Phaser;
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
    37
import java.util.function.Supplier;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    38
90ce3da70b43 Initial load
duke
parents:
diff changeset
    39
public class SynchronizationStatistics {
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    40
    private static class LockerThread extends Thread {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    41
        public LockerThread(Runnable r) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    42
            super(r, "LockerThread");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    43
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    44
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    45
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    46
    private static final ThreadMXBean mbean = ManagementFactory.getThreadMXBean();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    47
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    48
    private static final boolean blockedTimeCheck =
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    49
        mbean.isThreadContentionMonitoringSupported();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    50
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    51
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    52
    public static void main(String args[]) throws Exception {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    53
        if (blockedTimeCheck) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    54
            mbean.setThreadContentionMonitoringEnabled(true);
90ce3da70b43 Initial load
duke
parents:
diff changeset
    55
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    56
90ce3da70b43 Initial load
duke
parents:
diff changeset
    57
        if (!mbean.isThreadContentionMonitoringEnabled()) {
90ce3da70b43 Initial load
duke
parents:
diff changeset
    58
            throw new RuntimeException("TEST FAILED: " +
90ce3da70b43 Initial load
duke
parents:
diff changeset
    59
                "Thread Contention Monitoring is not enabled");
90ce3da70b43 Initial load
duke
parents:
diff changeset
    60
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    61
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    62
        testBlockingOnSimpleMonitor();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    63
        testBlockingOnNestedMonitor();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    64
        testWaitingOnSimpleMonitor();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    65
        testMultiWaitingOnSimpleMonitor();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    66
        testWaitingOnNestedMonitor();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    67
90ce3da70b43 Initial load
duke
parents:
diff changeset
    68
        System.out.println("Test passed.");
90ce3da70b43 Initial load
duke
parents:
diff changeset
    69
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    70
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    71
    private static LockerThread newLockerThread(Runnable r) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    72
        LockerThread t = new LockerThread(r);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    73
        t.setDaemon(true);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    74
        return t;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    75
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    76
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    77
    private static void waitForThreadState(Thread t, Thread.State state) throws InterruptedException {
28857
20499c662815 8071641: java/lang/management/ThreadMXBean/SynchronizationStatistics.java intermittently failed with NPE
jbachorik
parents: 25181
diff changeset
    78
        while (t.getState() != state) {
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    79
            Thread.sleep(3);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    80
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    81
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
    82
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    83
    /**
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    84
     * Tests that blocking on a single monitor properly increases the
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    85
     * blocked count at least by 1. Also asserts that the correct lock name is provided.
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    86
     */
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    87
    private static void testBlockingOnSimpleMonitor() throws Exception {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    88
        System.out.println("testBlockingOnSimpleMonitor");
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    89
        final Object lock1 = new Object();
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
    90
        System.out.println("Lock1 = " + lock1);
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
    91
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    92
        final Phaser p = new Phaser(2);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    93
        LockerThread lt = newLockerThread(new Runnable() {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    94
            @Override
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    95
            public void run() {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    96
                p.arriveAndAwaitAdvance(); // phase[1]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    97
                synchronized(lock1) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    98
                    System.out.println("[LockerThread obtained Lock1]");
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
    99
                    p.arriveAndAwaitAdvance(); // phase[2]
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   100
                }
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   101
                p.arriveAndAwaitAdvance(); // phase[3]
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   102
            }
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   103
        });
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   104
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   105
        lt.start();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   106
        long tid = lt.getId();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   107
        ThreadInfo ti = mbean.getThreadInfo(tid);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   108
        String lockName = null;
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   109
        synchronized(lock1) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   110
            p.arriveAndAwaitAdvance(); // phase[1]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   111
            waitForThreadState(lt, Thread.State.BLOCKED);
28857
20499c662815 8071641: java/lang/management/ThreadMXBean/SynchronizationStatistics.java intermittently failed with NPE
jbachorik
parents: 25181
diff changeset
   112
            do {
20499c662815 8071641: java/lang/management/ThreadMXBean/SynchronizationStatistics.java intermittently failed with NPE
jbachorik
parents: 25181
diff changeset
   113
                lockName = mbean.getThreadInfo(tid).getLockName();
20499c662815 8071641: java/lang/management/ThreadMXBean/SynchronizationStatistics.java intermittently failed with NPE
jbachorik
parents: 25181
diff changeset
   114
            } while (lockName == null);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   115
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   116
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   117
        p.arriveAndAwaitAdvance(); // phase[2]
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   118
        testBlocked(ti, () -> mbean.getThreadInfo(tid), lockName, lock1);
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   119
        p.arriveAndDeregister(); // phase[3]
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   120
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   121
        lt.join();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   122
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   123
        printok();
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   124
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   125
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   126
    /**
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   127
     * Tests that blocking on a nested monitor properly increases the
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   128
     * blocked count at least by 1 - it is not affected by the nesting depth.
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   129
     * Also asserts that the correct lock name is provided.
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   130
     */
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   131
    private static void testBlockingOnNestedMonitor() throws Exception {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   132
        System.out.println("testBlockingOnNestedMonitor");
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   133
        final Object lock1 = new Object();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   134
        final Object lock2 = new Object();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   135
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   136
        System.out.println("Lock1 = " + lock1);
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   137
        System.out.println("Lock2 = " + lock2);
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   138
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   139
        final Phaser p = new Phaser(2);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   140
        LockerThread lt = newLockerThread(new Runnable() {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   141
            @Override
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   142
            public void run() {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   143
                p.arriveAndAwaitAdvance(); // phase[1]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   144
                synchronized(lock1) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   145
                    System.out.println("[LockerThread obtained Lock1]");
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   146
                    p.arriveAndAwaitAdvance(); // phase[2]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   147
                    p.arriveAndAwaitAdvance(); // phase[3]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   148
                    synchronized(lock2) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   149
                        System.out.println("[LockerThread obtained Lock2]");
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   150
                        p.arriveAndAwaitAdvance(); // phase[4]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   151
                    }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   152
                    p.arriveAndAwaitAdvance(); // phase[5]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   153
                }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   154
            }
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   155
        });
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   156
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   157
        lt.start();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   158
        long tid = lt.getId();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   159
        ThreadInfo ti = mbean.getThreadInfo(tid);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   160
        String lockName = null;
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   161
        synchronized(lock1) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   162
            p.arriveAndAwaitAdvance(); // phase[1]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   163
            waitForThreadState(lt, Thread.State.BLOCKED);
28857
20499c662815 8071641: java/lang/management/ThreadMXBean/SynchronizationStatistics.java intermittently failed with NPE
jbachorik
parents: 25181
diff changeset
   164
            do {
20499c662815 8071641: java/lang/management/ThreadMXBean/SynchronizationStatistics.java intermittently failed with NPE
jbachorik
parents: 25181
diff changeset
   165
                lockName = mbean.getThreadInfo(tid).getLockName();
20499c662815 8071641: java/lang/management/ThreadMXBean/SynchronizationStatistics.java intermittently failed with NPE
jbachorik
parents: 25181
diff changeset
   166
            } while (lockName == null);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   167
        }
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   168
        p.arriveAndAwaitAdvance(); // phase[2]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   169
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   170
        ti = testBlocked(ti, () -> mbean.getThreadInfo(tid), lockName, lock1);
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   171
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   172
        synchronized(lock2) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   173
            p.arriveAndAwaitAdvance(); // phase [3]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   174
            waitForThreadState(lt, Thread.State.BLOCKED);
28857
20499c662815 8071641: java/lang/management/ThreadMXBean/SynchronizationStatistics.java intermittently failed with NPE
jbachorik
parents: 25181
diff changeset
   175
            do {
20499c662815 8071641: java/lang/management/ThreadMXBean/SynchronizationStatistics.java intermittently failed with NPE
jbachorik
parents: 25181
diff changeset
   176
                lockName = mbean.getThreadInfo(tid).getLockName();
20499c662815 8071641: java/lang/management/ThreadMXBean/SynchronizationStatistics.java intermittently failed with NPE
jbachorik
parents: 25181
diff changeset
   177
            } while (lockName == null);
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   178
        }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   179
        p.arriveAndAwaitAdvance(); // phase [4]
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   180
        testBlocked(ti, () -> mbean.getThreadInfo(tid), lockName, lock2);
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   181
        p.arriveAndDeregister();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   182
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   183
        lt.join();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   184
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   185
        printok();
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   186
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   187
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   188
    /**
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   189
     * Tests that waiting on a single monitor properly increases the waited
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   190
     * count by 1 and the waited time by a positive number.
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   191
     */
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   192
    private static void testWaitingOnSimpleMonitor() throws Exception {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   193
        System.out.println("testWaitingOnSimpleMonitor");
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   194
        final Object lock1 = new Object();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   195
        final Phaser p = new Phaser(2);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   196
        LockerThread lt = newLockerThread(new Runnable() {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   197
            @Override
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   198
            public void run() {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   199
                p.arriveAndAwaitAdvance(); // phase[1]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   200
                synchronized(lock1) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   201
                    System.out.println("[LockerThread obtained Lock1]");
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   202
                    try {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   203
                        lock1.wait(300);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   204
                    } catch (InterruptedException ex) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   205
                        // ignore
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   206
                    }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   207
                    p.arriveAndAwaitAdvance(); // phase[2]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   208
                }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   209
                p.arriveAndAwaitAdvance(); // phase[3]
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   210
            }
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   211
        });
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   212
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   213
        lt.start();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   214
        ThreadInfo ti1 = mbean.getThreadInfo(lt.getId());
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   215
        synchronized(lock1) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   216
            p.arriveAndAwaitAdvance(); // phase[1]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   217
            waitForThreadState(lt, Thread.State.BLOCKED);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   218
        }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   219
        p.arriveAndAwaitAdvance(); // phase[2]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   220
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   221
        testWaited(ti1, () -> mbean.getThreadInfo(lt.getId()), 1);
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   222
        p.arriveAndDeregister(); // phase[3]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   223
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   224
        lt.join();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   225
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   226
        printok();
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   227
    }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   228
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   229
    /**
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   230
     * Tests that waiting multiple times on the same monitor subsequently
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   231
     * increases the waited count by the number of subsequent calls and the
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   232
     * waited time by a positive number.
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   233
     */
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   234
    private static void testMultiWaitingOnSimpleMonitor() throws Exception {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   235
        System.out.println("testWaitingOnMultipleMonitors");
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   236
        final Object lock1 = new Object();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   237
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   238
        final Phaser p = new Phaser(2);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   239
        LockerThread lt = newLockerThread(new Runnable() {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   240
            @Override
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   241
            public void run() {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   242
                p.arriveAndAwaitAdvance(); // phase[1]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   243
                synchronized(lock1) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   244
                    System.out.println("[LockerThread obtained Lock1]");
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   245
                    for (int i = 0; i < 3; i++) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   246
                        try {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   247
                            lock1.wait(300);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   248
                        } catch (InterruptedException ex) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   249
                            // ignore
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   250
                        }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   251
                        p.arriveAndAwaitAdvance(); // phase[2-4]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   252
                    }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   253
                }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   254
                p.arriveAndAwaitAdvance(); // phase[5]
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   255
            }
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   256
        });
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   257
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   258
        lt.start();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   259
        ThreadInfo ti1 = mbean.getThreadInfo(lt.getId());
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   260
        synchronized(lock1) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   261
            p.arriveAndAwaitAdvance(); //phase[1]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   262
            waitForThreadState(lt, Thread.State.BLOCKED);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   263
        }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   264
        int phase = p.getPhase();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   265
        while ((p.arriveAndAwaitAdvance() - phase) < 3); // phase[2-4]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   266
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   267
        testWaited(ti1, () -> mbean.getThreadInfo(lt.getId()), 3);
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   268
        p.arriveAndDeregister(); // phase[5]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   269
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   270
        lt.join();
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   271
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   272
        printok();
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   273
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   274
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   275
    /**
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   276
     * Tests that waiting on monitors places in nested synchronized blocks
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   277
     * properly increases the waited count by the number of times the "lock.wait()"
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   278
     * was invoked and the waited time by a positive number.
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   279
     */
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   280
    private static void testWaitingOnNestedMonitor() throws Exception {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   281
        System.out.println("testWaitingOnNestedMonitor");
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   282
        final Object lock1 = new Object();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   283
        final Object lock2 = new Object();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   284
        final Object lock3 = new Object();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   285
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   286
        final Phaser p = new Phaser(2);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   287
        LockerThread lt = newLockerThread(new Runnable() {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   288
            @Override
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   289
            public void run() {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   290
                p.arriveAndAwaitAdvance(); // phase[1]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   291
                synchronized(lock1) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   292
                    System.out.println("[LockerThread obtained Lock1]");
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   293
                    try {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   294
                        lock1.wait(300);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   295
                    } catch (InterruptedException ex) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   296
                        // ignore
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   297
                    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   298
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   299
                    p.arriveAndAwaitAdvance(); // phase[2]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   300
                    synchronized(lock2) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   301
                        System.out.println("[LockerThread obtained Lock2]");
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   302
                        try {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   303
                            lock2.wait(300);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   304
                        } catch (InterruptedException ex) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   305
                            // ignore
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   306
                        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   307
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   308
                        p.arriveAndAwaitAdvance(); // phase[3]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   309
                        synchronized(lock3) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   310
                            System.out.println("[LockerThread obtained Lock3]");
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   311
                            try {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   312
                                lock3.wait(300);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   313
                            } catch (InterruptedException ex) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   314
                                // ignore
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   315
                            }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   316
                            p.arriveAndAwaitAdvance(); // phase[4]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   317
                        }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   318
                    }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   319
                }
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   320
                p.arriveAndAwaitAdvance(); // phase[5]
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   321
            }
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   322
        });
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   323
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   324
        lt.start();
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   325
        ThreadInfo ti1 = mbean.getThreadInfo(lt.getId());
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   326
        synchronized(lock1) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   327
            p.arriveAndAwaitAdvance(); // phase[1]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   328
            waitForThreadState(lt, Thread.State.BLOCKED);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   329
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   330
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   331
        synchronized(lock2) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   332
            p.arriveAndAwaitAdvance(); // phase[2]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   333
            waitForThreadState(lt, Thread.State.BLOCKED);
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   334
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   335
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   336
        synchronized(lock3) {
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   337
            p.arriveAndAwaitAdvance(); // phase[3]
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   338
            waitForThreadState(lt, Thread.State.BLOCKED);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   339
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   340
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   341
        p.arriveAndAwaitAdvance(); // phase[4]
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   342
        testWaited(ti1, () -> mbean.getThreadInfo(lt.getId()), 3);
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   343
        p.arriveAndDeregister(); // phase[5]
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   344
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   345
        lt.join();
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   346
        printok();
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   347
    }
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   348
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   349
    private static void printok() {
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   350
        System.out.println("OK\n");
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   351
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   352
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   353
    private static void testWaited(ThreadInfo ti1, Supplier<ThreadInfo> ti2, int waited)
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   354
    throws InterruptedException {
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   355
        boolean error;
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   356
        do {
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   357
            error = false;
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   358
            ThreadInfo ti = ti2.get();
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   359
            long waitCntDiff = ti.getWaitedCount() - ti1.getWaitedCount();
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   360
            long waitTimeDiff = ti.getWaitedTime() - ti1.getWaitedTime();
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   361
            if (waitCntDiff < waited) {
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   362
                System.err.println(
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   363
                    "Unexpected diff in waited count. Expecting at least "
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   364
                    + waited + " , got " + waitCntDiff
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   365
                );
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   366
                error = true;
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   367
            }
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   368
            if (waitTimeDiff <= 0) {
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   369
                System.err.println(
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   370
                    "Unexpected diff in waited time. Expecting increasing " +
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   371
                    "value, got " + waitTimeDiff + "ms"
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   372
                );
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   373
                error = true;
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   374
            }
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   375
            if (error) {
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   376
                System.err.println("Retrying in 20ms ...");
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   377
                Thread.sleep(20);
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   378
            }
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   379
        } while (error);
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   380
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   381
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   382
    private static ThreadInfo testBlocked(ThreadInfo ti1, Supplier<ThreadInfo> ti2,
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   383
                                    String lockName, final Object lock)
25181
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   384
    throws InterruptedException {
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   385
        boolean error;
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   386
        ThreadInfo ti = null;
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   387
        do {
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   388
            error = false;
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   389
            ti = ti2.get();
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   390
            long blkCntDiff = ti.getBlockedCount() - ti1.getBlockedCount();
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   391
            long blkTimeDiff = ti.getBlockedTime() - ti1.getBlockedTime();
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   392
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   393
            System.out.println("testBlocked: [" + blkCntDiff + ", " + blkTimeDiff + ", " + lockName + "]");
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   394
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   395
            if (blkCntDiff < 1) {
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   396
                System.err.println(
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   397
                    "Unexpected diff in blocked count. Expecting at least 1, " +
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   398
                    "got " + blkCntDiff
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   399
                );
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   400
                error = true;
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   401
            }
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   402
            if (blkTimeDiff < 0) {
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   403
                System.err.println(
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   404
                    "Unexpected diff in blocked time. Expecting a positive " +
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   405
                    "number, got " + blkTimeDiff
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   406
                );
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   407
                error = true;
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   408
            }
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   409
            if (!lockName.equals(lock.toString())) {
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   410
                System.err.println(
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   411
                    "Unexpected blocked monitor name. Expecting " +
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   412
                    lock.toString() + ", got " + lockName
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   413
                );
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   414
                error = true;
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   415
            }
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   416
            if (error) {
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   417
                System.err.println("Retrying in 20ms ...");
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   418
                Thread.sleep(20);
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   419
            }
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   420
        } while (error);
216e0899f503 8038794: java/lang/management/ThreadMXBean/SynchronizationStatistics.java fails intermittently
jbachorik
parents: 22568
diff changeset
   421
        return ti;
22568
8871c88d0793 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
jbachorik
parents: 19814
diff changeset
   422
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   423
}