/*
* 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;
class Flag {
static boolean timedWait;
boolean flag;
// Set this flag.
//
synchronized void set() {
XThread.say("flag: notification sent");
flag = true;
notifyAll();
}
// Wait for this flag to be set.
//
synchronized void await() {
if (!flag) {
if (timedWait) {
while (!flag) {
try { wait(1000000); } catch (InterruptedException e) {}
if (!flag) { XThread.say("flag: timed out"); }
}
} else {
try { wait(); } catch (InterruptedException e) {}
}
XThread.say("flag: notification received");
} else {
XThread.say("flag: already set");
}
}
}