Hvordan kan monitor.wait sætte thread på vent
I en klasse (jedit plugin)public class TxtConvPlugin extends EditPlugin implements EBComponent,Runnable {
...
public TxtConvPlugin(...) {
thread=new Thread(this);
thread.start();
...
}
public void startConvertFile() {
onWait=false;
synchronized(monitor) {
monitor.notify();
}
}
private boolean onWait=true;
private Thread thread;
final Object monitor = new Object();
public void run() {
try {
for(;;) {
while(onWait)
synchronized(monitor) {
monitor.wait();
}
convertFile();
onWait=true;
}
} catch (InterruptedException e) {}
}
Muliggør afvikling af convertFile() i en ny thread. Det virker, men jeg forstår det ikke.
Jeg ved godt hvordan synchronized(object) bevirker at kun en thread of execution ad gangen kan befinde sig i det omklamrede.
Men hvordan kan wait på et object, hvis eneste relation til klassen hvori run ligger, er at det er data member, afstedkomme at thread kommer på vent?