/*
* Copyright ( C ) 2006 The Android Open Source Project
*
* Licensed under the Apache License , Version 2 . 0 ( the " License " ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an " AS IS " BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
*/
/**
* Test synchronization primitives .
*
* TODO : this should be re - written to be a little more rigorous and / or
* useful . Also , the ThreadDeathHandler stuff should be exposed or
* split out .
*/
public class Main {
public static void main(String[] args) {
System.out.println("Sleep Test" );
sleepTest();
System.out.println("\nCount Test" );
countTest();
System.out.println("\nInterrupt Test" );
interruptTest();
}
static void sleepTest() {
System.out.println("GOING" );
try {
Thread .sleep(1000 );
} catch (InterruptedException ie) {
System.out.println("INTERRUPT!" );
ie.printStackTrace(System.out);
}
System.out.println("GONE" );
}
static void countTest() {
CpuThread one, two;
one = new CpuThread(1 );
two = new CpuThread(2 );
synchronized (one) {
one.start();
try {
one.wait();
} catch (InterruptedException ie) {
System.out.println("INTERRUPT!" );
ie.printStackTrace(System.out);
}
}
two.start();
//System.out.println("main: off and running");
try {
one.join();
two.join();
} catch (InterruptedException ie) {
System.out.println("INTERRUPT!" );
ie.printStackTrace(System.out);
}
System.out.println("main: all done" );
}
static void interruptTest() {
SleepyThread sleepy, pesky;
sleepy = new SleepyThread(null );
pesky = new SleepyThread(sleepy);
sleepy.setPriority(4 );
sleepy.start();
pesky.start();
pesky.setPriority(3 );
}
}
class CpuThread extends Thread {
static Object mSyncable = new Object();
static int mCount = 0 ;
int mNumber;
CpuThread(int num) {
super ("CpuThread " + num);
mNumber = num;
}
public void run() {
//System.out.print("thread running -- ");
//System.out.println(Thread.currentThread().getName());
synchronized (mSyncable) {
synchronized (this ) {
this .notify();
}
for (int i = 0 ; i < 10 ; i++) {
output(mNumber);
}
System.out.print("Final result: " );
System.out.println(mCount);
}
}
void output(int num) {
int count = mCount;
System.out.print("going: " );
System.out.println(num);
/* burn CPU; adjust end value so we exceed scheduler quantum */
for (int j = 0 ; j < 5000 ; j++) {
;
}
count++;
mCount = count;
}
}
class SleepyThread extends Thread {
private SleepyThread mOther;
private Integer[] mWaitOnMe; // any type of object will do
private volatile boolean otherDone;
private static int count = 0 ;
SleepyThread(SleepyThread other) {
mOther = other;
otherDone = false ;
mWaitOnMe = new Integer[] { 1 , 2 };
setName("thread#" + count);
count++;
}
public void run() {
System.out.println("SleepyThread.run starting" );
if (false ) {
ThreadDeathHandler threadHandler =
new ThreadDeathHandler("SYNC THREAD" );
Thread .currentThread().setUncaughtExceptionHandler(threadHandler);
throw new NullPointerException("die" );
}
if (mOther == null ) {
boolean intr = false ;
try {
do {
synchronized (mWaitOnMe) {
mWaitOnMe.wait(9000 );
}
} while (!otherDone);
} catch (InterruptedException ie) {
// Expecting this; interrupted should be false.
System.out.println(Thread .currentThread().getName() +
" interrupted, flag=" + Thread .interrupted());
intr = true ;
} catch (Exception ex) {
ex.printStackTrace(System.out);
}
if (!intr)
System.out.println("NOT INTERRUPTED" );
} else {
try {
Thread .sleep(2000 );
} catch (InterruptedException ie) {
System.out.println("PESKY INTERRUPTED?" );
}
System.out.println("interrupting other (isAlive="
+ mOther.isAlive() + ")" );
mOther.interrupt();
mOther.otherDone = true ;
}
}
}
Messung V0.5 in Prozent C=90 H=88 G=88
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-29)
¤
*© Formatika GbR, Deutschland