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