java之非同步回撥
阿新 • • 發佈:2019-01-08
非同步回撥我的理解:
1.使用了委託模式,呼叫方(ServiceA)持有被呼叫方(ServiceB)的引用,然後呼叫被呼叫方(ServiceB)的方法,被呼叫方方法(ServiceB)完成後,呼叫呼叫方(ServiceA)的回撥函式做一些事情
2.非同步回撥多是一些耗時的操作,在新執行緒中去呼叫被呼叫方(ServiceB)方法
3.非同步回撥可以大大提高IO效率,這是當前開發的主流,比如Netty、Node大量使用非同步呼叫思想
4.多使用匿名內部類實現回撥
例項:
呼叫方(ServiceA)呼叫被呼叫方(ServiceB)方法建立使用者,建立完成後,被呼叫方(ServiceB)呼叫呼叫方(ServiceA)回撥函式做一些事情(寫資料庫、發訊息。。whatever)
回撥介面:
public interface CallBack {
void process(String result);
}
ServiceA:
public class ServiceA { private ServiceB serviceB; public ServiceA(ServiceB serviceB) { this.serviceB = serviceB; } public void createUser(String userName) { serviceB.createUser(new CallBack() { @Override public void process(String desc) { System.out.println("serviceB返回訊息:" + desc); } }, userName); } }
ServiceB:
public class ServiceB { public void createUser(CallBack callBack, final String userName) { new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("ServiceB建立使用者" + userName + "成功"); callBack.process("建立使用者" + userName + "成功"); } }).start(); } }
具體使用:
public class BizUseTest {
public static void main(String[] args) {
ServiceB serviceB = new ServiceB();
ServiceA serviceA = new ServiceA(serviceB);
serviceA.createUser("kobe");
}
}
執行結果:
ServiceB建立使用者kobe成功
serviceB返回訊息建立使用者kobe成功
如果能夠真正貫徹到專案中去,也是可以的