1aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes/*
2aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes * Copyright (C) 2006 The Android Open Source Project
3aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes *
4aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes * Licensed under the Apache License, Version 2.0 (the "License");
5aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes * you may not use this file except in compliance with the License.
6aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes * You may obtain a copy of the License at
7aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes *
8aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes *      http://www.apache.org/licenses/LICENSE-2.0
9aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes *
10aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes * Unless required by applicable law or agreed to in writing, software
11aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
12aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes * See the License for the specific language governing permissions and
14aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes * limitations under the License.
15aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes */
16aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes
17aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughesimport java.util.ArrayList;
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test some basic thread stuff.
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class Main {
23aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes    public static void main(String[] args) throws Exception {
24aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes        System.out.println("Initializing System.out...");
25aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes
26aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes        MyThread[] threads = new MyThread[512];
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 512; i++) {
28aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes            threads[i] = new MyThread();
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
31aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes        for (MyThread thread : threads) {
32aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes            thread.start();
33aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes        }
34aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes        for (MyThread thread : threads) {
35aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes            thread.join();
36aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes        }
37aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes
38aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes        System.out.println("Thread count: " + MyThread.mCount);
39aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        go();
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.println("thread test done");
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static void go() {
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Thread t = new Thread(null, new ThreadTestSub(), "Thready", 7168);
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        t.setDaemon(false);
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.print("Starting thread '" + t.getName() + "'\n");
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        t.start();
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            t.join();
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (InterruptedException ex) {
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ex.printStackTrace();
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
57de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.print("Thread starter returning\n");
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Simple thread capacity test.
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static class MyThread extends Thread {
65aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes        static int mCount = 0;
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void run() {
67aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes            synchronized (MyThread.class) {
68aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes                ++mCount;
69aec9c8f142ad839883ae3de7383456a08823a282Elliott Hughes            }
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectclass ThreadTestSub implements Runnable {
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void run() {
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.print("@ Thread running\n");
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Thread.currentThread().setDaemon(true);
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.print("@ FAILED: setDaemon() succeeded\n");
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IllegalThreadStateException itse) {
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.print("@ Got expected setDaemon exception\n");
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //if (true)
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //    throw new NullPointerException();
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Thread.sleep(2000);
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        catch (InterruptedException ie) {
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.print("@ Interrupted!\n");
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        finally {
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.print("@ Thread bailing\n");
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
98