jdk/test/java/lang/management/ThreadMXBean/ThreadDaemonTest.java
author jmanson
Tue, 24 Feb 2015 09:46:29 +0100
changeset 29101 55f7a91aaa32
child 30376 2ccf2cf7ea48
permissions -rw-r--r--
6588467: Add isDaemon() and getPriority() to ThreadInfo Reviewed-by: mchung, sla, dholmes, martin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29101
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
     1
/*
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
     2
 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
     4
 *
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
     7
 * published by the Free Software Foundation.
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
     8
 *
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    13
 * accompanied this code).
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    14
 *
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    18
 *
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    21
 * questions.
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    22
 */
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    23
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    24
import java.lang.management.*;
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    25
import java.util.*;
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    26
import java.util.concurrent.*;
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    27
import java.util.concurrent.atomic.*;
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    28
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    29
/*
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    30
 * @test
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    31
 * @bug     6588467
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    32
 * @summary Basic test of ThreadInfo.isDaemon
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    33
 * @author  Jeremy Manson
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    34
 */
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    35
public class ThreadDaemonTest {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    36
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    37
    public static void main(String[] args) throws Exception {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    38
        final int NUM_THREADS = 20;
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    39
        final String THREAD_PREFIX = "ThreadDaemonTest-";
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    40
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    41
        final CountDownLatch started = new CountDownLatch(NUM_THREADS);
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    42
        final CountDownLatch finished = new CountDownLatch(1);
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    43
        final AtomicReference<Exception> fail = new AtomicReference<>(null);
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    44
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    45
        Thread[] allThreads = new Thread[NUM_THREADS];
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    46
        ThreadMXBean mbean = ManagementFactory.getThreadMXBean();
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    47
        Random rand = new Random();
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    48
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    49
        for (int i = 0; i < NUM_THREADS; i++) {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    50
            allThreads[i] = new Thread(new Runnable() {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    51
                    public void run() {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    52
                        try {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    53
                            started.countDown();
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    54
                            finished.await();
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    55
                        } catch (InterruptedException e) {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    56
                            fail.set(new Exception(
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    57
                                "Unexpected InterruptedException"));
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    58
                        }
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    59
                    }
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    60
                }, THREAD_PREFIX + i);
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    61
            allThreads[i].setDaemon(rand.nextBoolean());
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    62
            allThreads[i].start();
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    63
        }
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    64
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    65
        started.await();
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    66
        try {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    67
            ThreadInfo[] allThreadInfos = mbean.dumpAllThreads(false, false);
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    68
            int count = 0;
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    69
            for (int i = 0; i < allThreadInfos.length; i++) {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    70
                String threadName = allThreadInfos[i].getThreadName();
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    71
                if (threadName.startsWith(THREAD_PREFIX)) {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    72
                    count++;
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    73
                    String[] nameAndNumber = threadName.split("-");
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    74
                    int threadNum = Integer.parseInt(nameAndNumber[1]);
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    75
                    if (allThreads[threadNum].isDaemon() !=
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    76
                        allThreadInfos[i].isDaemon()) {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    77
                        throw new RuntimeException(
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    78
                            allThreads[threadNum] + " is not like " +
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    79
                            allThreadInfos[i] + ". TEST FAILED.");
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    80
                    }
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    81
                }
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    82
            }
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    83
            if (count != NUM_THREADS) {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    84
                throw new RuntimeException("Wrong number of threads examined");
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    85
            }
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    86
        }
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    87
        finally { finished.countDown(); }
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    88
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    89
        for (int i = 0; i < NUM_THREADS; i++) {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    90
            allThreads[i].join();
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    91
        }
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    92
        if (fail.get() != null) {
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    93
            throw fail.get();
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    94
        }
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    95
    }
55f7a91aaa32 6588467: Add isDaemon() and getPriority() to ThreadInfo
jmanson
parents:
diff changeset
    96
}