功能说明:线程中执行一个命令,然后等待,直到其他线程有消息通知时该命令才执行结束
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
本文通过一个具体的Java代码示例,详细介绍了线程中使用wait和notify方法的机制。一个线程执行命令并等待,直至被其他线程通过notify方法唤醒继续执行,展示了线程间同步的基本原理。
678

被折叠的 条评论
为什么被折叠?



