您的位置:首页 > 编程语言 > Java开发

Java 如何把异步调用模拟成同步调用

2009-04-24 13:55 281 查看
在某些时候,需要把异步调用模拟成同步调用的形态。例如,基于基于异步通信的客户端需要同步调用。 :-)

要实现这个转换,可以有多种实现方法:

1。很常用的方法,应用循环机制:

boolean flag = false;

public void methodA(){

System.out.println("Hello, waitting for response!");

while(!flag){

System.out.println("waitting.........");

try {
Thread.sleep(1000);
}

catch (InterruptedException e) {

e.printStackTrace();

}

}

System.out.prinln("Response handled........");

}

public void methodB(){

System.out.println("Get response!");

flag = true;

}

当响应线程收到响应信息后,就会调用methodB(),重设flag的值,以便methodA()可以退出循环,继续后面逻辑。

2。应用Object.wait()方法中断,等待通知。然后用Object.notify()或者Object.notifyAll()退出等待,继续逻辑

public class LockTest {

private Object locker = new Object();

private boolean flag = false;

/**

* Locking thread when it is invoked

*/

private void lock(){

try {

synchronized(this.locker){

locker.wait();

}

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* Unlocking thread which has been locked

*/

private void unLock(){

locker.notify();

}

/**

* remove binding locker

*/

public void update(){

this.flag = true;

synchronized(this.locker){

this.unLock();

}

}

/**

* test lock function

*/

public void test(){

System.out.println("Hello, this is testing for lock");

this.lock();

if(flag){

System.out.println("Testing is ok!");

}else{

System.out.println("Testing is failed!");

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: