1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// Copyright 2006 The Android Open Source Project 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This causes most VMs to lock up. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interrupting threads in class initialization should NOT work. 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class Main { 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean aInitialized = false; 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean bInitialized = false; 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static public void main(String[] args) { 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread thread1, thread2; 14de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("Deadlock test starting."); 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thread1 = new Thread() { public void run() { new A(); } }; 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thread2 = new Thread() { public void run() { new B(); } }; 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thread1.start(); 19aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes // Give thread1 a chance to start before starting thread2. 20aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes try { Thread.sleep(1000); } catch (InterruptedException ie) { } 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thread2.start(); 22de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { Thread.sleep(6000); } catch (InterruptedException ie) { } 24de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro 25aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes System.out.println("Deadlock test interrupting threads."); 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thread1.interrupt(); 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thread2.interrupt(); 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("Deadlock test main thread bailing."); 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("A initialized: " + aInitialized); 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("B initialized: " + bInitialized); 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.exit(0); 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectclass A { 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static { 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("A initializing..."); 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { Thread.sleep(3000); } catch (InterruptedException ie) { } 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new B(); 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("A initialized"); 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Main.aInitialized = true; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectclass B { 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static { 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("B initializing..."); 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { Thread.sleep(3000); } catch (InterruptedException ie) { } 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new A(); 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("B initialized"); 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Main.bInitialized = true; 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 54