< prev index next >

test/hotspot/jtreg/serviceability/jvmti/GetOwnedMonitorInfo/GetOwnedMonitorInfoTest.java

Print this page

10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 
25 /**
26  * @test
27  * @bug 8185164
28  * @summary Checks that a contended monitor does not show up in the list of owned monitors
29  * @requires vm.jvmti
30  * @compile GetOwnedMonitorInfoTest.java
31  * @run main/othervm/native -agentlib:GetOwnedMonitorInfoTest GetOwnedMonitorInfoTest
32  */
33 
34 import java.io.PrintStream;
35 
36 public class GetOwnedMonitorInfoTest {
37 
38     static {
39         try {
40             System.loadLibrary("GetOwnedMonitorInfoTest");
41         } catch (UnsatisfiedLinkError ule) {
42             System.err.println("Could not load GetOwnedMonitorInfoTest library");
43             System.err.println("java.library.path: "
44                                + System.getProperty("java.library.path"));
45             throw ule;
46         }
47     }
48 
49     private static native int check();
50     private static native boolean hasEventPosted();
51 
52     public static void main(String[] args) throws Exception {






53         final GetOwnedMonitorInfoTest lock = new GetOwnedMonitorInfoTest();
54 
55         Thread t1 = new Thread(() -> {
56             synchronized (lock) {
57                 System.out.println("Thread in sync section: "
58                                    + Thread.currentThread().getName());
59             }
60         });
61 
62         // Make sure t1 contends on the monitor.
63         synchronized (lock) {
64             System.out.println("Main starting worker thread.");
65             t1.start();
66 
67             // Wait for the MonitorContendedEnter event
68             while (!hasEventPosted()) {
69                 System.out.println("Main waiting for event.");
70                 Thread.sleep(100);
71             }
72         }
73 
74         t1.join();
75 

10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 
25 /**
26  * @test
27  * @bug 8185164
28  * @summary Checks that a contended monitor does not show up in the list of owned monitors
29  * @requires vm.jvmti
30  * @compile --enable-preview -source ${jdk.version} GetOwnedMonitorInfoTest.java
31  * @run main/othervm/native --enable-preview -agentlib:GetOwnedMonitorInfoTest GetOwnedMonitorInfoTest
32  */
33 
34 import java.io.PrintStream;
35 
36 public class GetOwnedMonitorInfoTest {
37 
38     static {
39         try {
40             System.loadLibrary("GetOwnedMonitorInfoTest");
41         } catch (UnsatisfiedLinkError ule) {
42             System.err.println("Could not load GetOwnedMonitorInfoTest library");
43             System.err.println("java.library.path: "
44                                + System.getProperty("java.library.path"));
45             throw ule;
46         }
47     }
48 
49     private static native int check();
50     private static native boolean hasEventPosted();
51 
52     public static void main(String[] args) throws Exception {
53         runTest(true);
54         runTest(false);
55     }
56 
57     public static void runTest(boolean isVirtual) throws Exception {
58         var threadFactory = isVirtual ? Thread.ofVirtual().factory() : Thread.ofPlatform().factory();
59         final GetOwnedMonitorInfoTest lock = new GetOwnedMonitorInfoTest();
60 
61         Thread t1 = threadFactory.newThread(() -> {
62             synchronized (lock) {
63                 System.out.println("Thread in sync section: "
64                                    + Thread.currentThread().getName());
65             }
66         });
67 
68         // Make sure t1 contends on the monitor.
69         synchronized (lock) {
70             System.out.println("Main starting worker thread.");
71             t1.start();
72 
73             // Wait for the MonitorContendedEnter event
74             while (!hasEventPosted()) {
75                 System.out.println("Main waiting for event.");
76                 Thread.sleep(100);
77             }
78         }
79 
80         t1.join();
81 
< prev index next >