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