java同步转化成异步_Java 如何把异步调用模拟成同步调用
在某些時候,須要把異步調用模擬成同步調用的形態。例如,基于基于異步通訊的客戶端須要同步調用。 :-)異步
要實現這個轉換,能夠有多種實現方法:this
1。很經常使用的方法,應用循環機制:spa
boolean?flag = false;線程
public void?methodA(){rem
System.out.println("Hello, waitting for response!");同步
while(!flag){it
System.out.println("waitting.........");io
try { Thread.sleep(1000); } function
catch (InterruptedException e) { class
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!");
}
}
}
總結
以上是生活随笔為你收集整理的java同步转化成异步_Java 如何把异步调用模拟成同步调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 限制投屏清晰度后:爱奇艺TV版新功能允许
- 下一篇: 2022年汽车动力电池数据出炉 宁德时代