/* * 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. */ package test.org.jikesrvm.basic.core.threads; /** * Test notification. * <p/> * monitorenter * monitorexit * <p/> * wait * notify * notifyAll */ class TestNotification { public static void main(String[] args) { int count = 20; Mailbox mailbox = new Mailbox(count); Flag flag = new Flag(); final Task[] tasks = new Task[count]; for (int i = 0; i < tasks.length; ++i) { tasks[i] = new Task(mailbox, flag, i); } for (Task task : tasks) { task.start(); //Have to wait for the messages to be sent //otherwises replies will be received in wrong //order if method is part-way through a compile while(!task.sent) { Thread.yield(); } } // wait for mailbox to fill up mailbox.await(); // display mail for (int i = 0; i < count; ++i) { XThread.say(mailbox.messages[i] + " replied"); } // pause to allow tasks to queue up on flag XThread.say("sleeping"); try { Thread.sleep(1000); } catch (InterruptedException e) {} XThread.say("running"); // release tasks waiting on flag, letting them terminate flag.set(); XThread.say("bye"); XThread.outputMessages(); } }