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