功能说明:线程中执行一个命令,然后等待,直到其他线程有消息通知时该命令才执行结束
public class TestWaitNotify {
void execute() {//excute命令执行后需要等待其他消息回调通知executeComplete完成,才执行结束
System.out.println("execute begin");
System.out.println("send cmd to do something, and wait receive cmd complete message");
try {
synchronized (this) {
this.wait();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("execute end");
}
//通知执行结束
void executeComplete() {
System.out.println("execute cmd complete");
synchronized (this) {
this.notify();
}
}
}
测试线程执行execute指令:
public class TestWaitTherad extends Thread{
TestWaitNotify mTestWait;
TestWaitTherad(TestWaitNotify testWait){
mTestWait = testWait;
}
@Override
public void run() {
System.out.println("TestWaitThread run cunnrentId =" + this.getId());
mTestWait.execute();
}
}
测试main函数,其他线程执行execute,并且在主线程中通知执行结束
public class TestMain {
public static void main(String[] args) {
TestWaitNotify testwait = new TestWaitNotify();
TestWaitTherad testThread = new TestWaitTherad(testwait);
testThread.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
testwait.executeComplete();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
执行结果:
TestWaitThread run cunnrentId =12
execute begin
send cmd to do something, and wait receive cmd complete message
execute cmd complete
execute end