package vm;
import icecaptools.IcecapCompileMe;
public abstract class Monitor {
public abstract void lock();
public abstract void unlock();
protected Monitor() {
}
public void attach(Object target) {
attachMonitor(target);
}
native void attachMonitor(Object target);
protected native static Object getAttachedMonitor(Object target);
/* Method below is called by the VM to enter a monitor */
@IcecapCompileMe
static void lock(Monitor monitor) {
monitor.lock();
}
/* Method below is called by the VM to exit a monitor */
@IcecapCompileMe
static void unlock(Monitor monitor) {
monitor.unlock();
}
@IcecapCompileMe
public static void wait(Object target) {
Scheduler sch = Machine.getCurrentScheduler();
sch.wait(target);
}
@IcecapCompileMe
public static void notify(Object target) {
Scheduler sch = Machine.getCurrentScheduler();
sch.notify(target);
}
@IcecapCompileMe
public static void notifyAll(Object target) {
Scheduler sch = Machine.getCurrentScheduler();
sch.notifyAll(target);
}
@IcecapCompileMe
public static Monitor getDefaultMonitor() {
Scheduler sch = Machine.getCurrentScheduler();
if (sch != null) {
return sch.getDefaultMonitor();
} else {
return null;
}
}
}