java active是什么,讓我們一起了解一下?
在java中,Active Object模式是一種異步編程模式。它通過對方法的調(diào)用與方法的執(zhí)行進(jìn)行解耦來提高并發(fā)性。它的核心是允許任務(wù)的提交(相當(dāng)于對異步方法的調(diào)用)和任務(wù)的執(zhí)行(相當(dāng)于異步方法的真正執(zhí)行)分離。
首先從調(diào)用方代碼來看,調(diào)用一個Active Object對象的方法與調(diào)用普通Java對象的方法并無太大差別。
1?ActiveObject?ao=...; 2?Future?future?=?ao.doSomething("data"); 3?//執(zhí)行其它操作 4?String?result?=?future.get(); 5?System.out.println(result);
那么Active Object模式的架構(gòu)是什么,有什么作用?
1、當(dāng)Active Object模式對外暴露的異步方法被調(diào)用時,與該方法調(diào)用相關(guān)的上下文信息,包括被調(diào)用的異步方法名(或其代表的操作)、調(diào)用方代碼所傳遞的參數(shù)等,會被封裝成一個對象。
該對象被稱為方法請求(Method Request)。方法請求對象會被存入Active Object模式所維護(hù)的緩沖區(qū)(Activation Queue)中,并由專門的工作線程負(fù)責(zé)根據(jù)其包含的上下文信息執(zhí)行相應(yīng)的操作。
也就是說,方法請求對象是由運(yùn)行調(diào)用方代碼的線程通過調(diào)用Active Object模式對外暴露的異步方法生成的,而方法請求所代表的操作則由專門的線程來執(zhí)行,從而實(shí)現(xiàn)了方法的調(diào)用與執(zhí)行的分離,產(chǎn)生了并發(fā)。
2、Active Object模式的主要參與者有以下幾種。
Proxy:負(fù)責(zé)對外暴露異步方法接口。當(dāng)調(diào)用方代碼調(diào)用該參與者實(shí)例的異步方法doSomething時,該方法會生成一個相應(yīng)的MethodRequest實(shí)例并將其存儲到Scheduler所維護(hù)的緩沖區(qū)中。doSomething方法的返回值是一個表示其執(zhí)行結(jié)果的外包裝對象:Future參與者的實(shí)例。異步方法doSomething運(yùn)行在調(diào)用方代碼所在的線程中。
MethodRequest:負(fù)責(zé)將調(diào)用方代碼對Proxy實(shí)例的異步方法的調(diào)用封裝為一個對象。該對象保留了異步方法的名稱及調(diào)用方代碼傳遞的參數(shù)等上下文信息。它使得將Proxy的異步方法的調(diào)用和執(zhí)行分離成為可能。其call方法會根據(jù)其所包含上下文信息調(diào)用Servant實(shí)例的相應(yīng)方法。
ActivationQueue:負(fù)責(zé)臨時存儲由Proxy的異步方法被調(diào)用時所創(chuàng)建的MethodRequest實(shí)例的緩沖區(qū)。
Scheduler:負(fù)責(zé)將Proxy的異步方法所創(chuàng)建的MethodRequest實(shí)例存入其維護(hù)的緩沖區(qū)中。并根據(jù)一定的調(diào)度策略,對其維護(hù)的緩沖區(qū)中的MethodRequest實(shí)例進(jìn)行執(zhí)行。其調(diào)度策略可以根據(jù)實(shí)際需要來定,如FIFO、LIFO和根據(jù)MethodRequest中包含的信息所定的優(yōu)先級等。
Servant:負(fù)責(zé)對Proxy所暴露的異步方法的具體實(shí)現(xiàn)。
Future:負(fù)責(zé)存儲和返回Active Object異步方法的執(zhí)行結(jié)果。
以上就是小編今天的分享了,希望可以幫助到大家。