/*
* This file is part of the Jikes RVM project (http://jikesrvm.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License. You
* may obtain a copy of the License at
*
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership.
*/
import org.jikesrvm.scheduler.RVMThread;
class TestDeadVPQueue {
public static void
main(String[] args) throws Exception {
TestDeadVPQueueWorker w = null;
System.out.println("TestDeadVPQueue");
// load the native code library
System.out.println("Attempting to load dynamic library ...");
System.out.println("(the LIBPATH env variable must be set for this directory)");
System.loadLibrary("TestDeadVPQueueWorker");
// create a thread and wait for it to terminate
System.out.println(Thread.currentThread().getName() + ": creating worker 1");
TestDeadVPQueueWorker w1 = new TestDeadVPQueueWorker("worker 1");
System.out.println(Thread.currentThread().getName() + ": starting worker 1");
w1.start();
while (w1.state != TestDeadVPQueueWorker.ending) {
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
// ignore
}
}
System.out.println(Thread.currentThread().getName() + ": ending worker 1");
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
// ignore
}
// create a second thread and wait for it to terminate
System.out.println(Thread.currentThread().getName() + ": creating worker 2");
TestDeadVPQueueWorker w2 = new TestDeadVPQueueWorker("worker 2");
System.out.println(Thread.currentThread().getName() + ": starting worker 2");
w2.start();
while (w2.state != TestDeadVPQueueWorker.ending) {
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
// ignore
}
}
System.out.println(Thread.currentThread().getName() + ": ending worker 2");
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
// ignore
}
System.out.println("end synchronous test- dump VM state");
RVMThread.dumpVirtualMachine();
System.out.println("start semi asynchronous test- then dump VM state");
// create start and run 9 threads
for (int i = 1; i < 10; i++) {
String s = " worker " + i;
// create a thread and start it
System.out.println(Thread.currentThread().getName() + ":creating" + s);
w = new TestDeadVPQueueWorker(s);
System.out.println(Thread.currentThread().getName() + ":starting" + s);
w.start();
// wait a bit before we start the next
try {
Thread.currentThread().sleep(10);
} catch (InterruptedException e) {
// ignore
}
}
while (w.state != TestDeadVPQueueWorker.ending) {
try {
Thread.currentThread().sleep(500);
} catch (InterruptedException e) {
// ignore
}
}
System.out.println("main: bye");
RVMThread.dumpVirtualMachine();
}
}