模塊間調(diào)用
在一個(gè)應(yīng)用系統(tǒng)中,無(wú)論使用何種語(yǔ)言開發(fā),必然存在模塊之間的調(diào)用,調(diào)用的方式分為幾種:
(1)同步調(diào)用
同步調(diào)用是最基本并且最簡(jiǎn)單的一種調(diào)用方式,類A的方法a()調(diào)用類B的方法b(),一直等待b()方法執(zhí)行完畢,a()方法繼續(xù)往下走。這種調(diào)用方式適用于方法b()執(zhí)行時(shí)間不長(zhǎng)的情況,因?yàn)閎()方法執(zhí)行時(shí)間一長(zhǎng)或者直接阻塞的話,a()方法的余下代碼是無(wú)法執(zhí)行下去的,這樣會(huì)造成整個(gè)流程的阻塞。
(2)異步調(diào)用
異步調(diào)用是為了解決同步調(diào)用可能出現(xiàn)阻塞,導(dǎo)致整個(gè)流程卡住而產(chǎn)生的一種調(diào)用方式。類A的方法方法a()通過(guò)新起線程的方式調(diào)用類B的方法b(),代碼接著直接往下執(zhí)行,這樣無(wú)論方法b()執(zhí)行時(shí)間多久,都不會(huì)阻塞住方法a()的執(zhí)行。但是這種方式,由于方法a()不等待方法b()的執(zhí)行完成,在方法a()需要方法b()執(zhí)行結(jié)果的情況下(視具體業(yè)務(wù)而定,有些業(yè)務(wù)比如啟異步線程發(fā)個(gè)微信通知、刷新一個(gè)緩存這種就沒必要),必須通過(guò)一定的方式對(duì)方法b()的執(zhí)行結(jié)果進(jìn)行監(jiān)聽。在Java中,可以使用Future+Callable的方式做到這一點(diǎn),具體做法可以參見我的這篇文章Java多線程21:多線程下其他組件之CyclicBarrier、Callable、Future和FutureTask。
(3)回調(diào)
最后是回調(diào),回調(diào)的思想是: