1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// Copyright 2008 The Android Open Source Project
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Exercise monitors.
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class Monitor {
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static int mVal = 0;
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public synchronized void subTest() {
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Object obj = new Object();
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        synchronized (obj) {
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            mVal++;
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            obj = null;     // does NOT cause a failure on exit
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assert(obj == null);
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static void run() {
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.println("Monitor.run");
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Object obj = null;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            synchronized (obj) {
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                mVal++;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assert(false);
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException npe) {
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            /* expected */
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        obj = new Object();
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        synchronized (obj) {
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            mVal++;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Monitor().subTest();
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assert(mVal == 2);
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
45