一種實(shí)現(xiàn)分布式事務(wù)的方法和裝置制造方法
【專利摘要】本發(fā)明提出一種實(shí)現(xiàn)分布式事務(wù)的方法和裝置,其中方法包括:設(shè)置N個(gè)子線程,每個(gè)子線程負(fù)責(zé)處理分布式事務(wù)中的一個(gè)事務(wù);其中,各個(gè)事務(wù)針對(duì)不同的數(shù)據(jù)源,每個(gè)事務(wù)包括針對(duì)該數(shù)據(jù)源的一個(gè)以上操作;初始化CountDownLatch類,將所述CountDownLatch類計(jì)數(shù)器的初始值設(shè)置為N;主線程調(diào)用CountDownLatch類的await方法;分別啟動(dòng)所述N個(gè)子線程,當(dāng)一個(gè)子線程執(zhí)行完成時(shí),調(diào)用CountDownLatch類的countDown方法,使得所述CountDownLatch類計(jì)數(shù)器的值減1;當(dāng)所述CountDownLatch類計(jì)數(shù)器的值為0時(shí),繼續(xù)執(zhí)行所述主線程。本發(fā)明能夠?qū)崿F(xiàn)針對(duì)多個(gè)數(shù)據(jù)源的事務(wù)并發(fā)進(jìn)行。
【專利說明】一種實(shí)現(xiàn)分布式事務(wù)的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及分布式事務(wù)【技術(shù)領(lǐng)域】,尤其涉及一種實(shí)現(xiàn)分布式事務(wù)的方法和裝置?!颈尘凹夹g(shù)】
[0002]當(dāng)前企業(yè)級(jí)的應(yīng)用中,有很多的系統(tǒng)涉及到多個(gè)數(shù)據(jù)源,針對(duì)多個(gè)數(shù)據(jù)源的處理就要涉及到分布式事務(wù);分布式事務(wù)實(shí)現(xiàn)的好與壞,直接影響到該企業(yè)級(jí)應(yīng)用的性能以及用戶體驗(yàn)。
[0003]現(xiàn)有的實(shí)現(xiàn)分布式事務(wù)的解決方案之一是利用一些商用的應(yīng)用服務(wù)器來實(shí)現(xiàn),比如 WebSphere0
[0004]另外一種普遍的分布式事務(wù)解決方案是將涉及到多個(gè)數(shù)據(jù)源的操作封裝為一個(gè)大的事務(wù),如圖1所示。啟動(dòng)事務(wù)后,順序進(jìn)行涉及多個(gè)數(shù)據(jù)源的多個(gè)操作,如果在這多個(gè)操作中出現(xiàn)操作失敗或者是出現(xiàn)異常,則回滾該事務(wù)。
[0005]上述兩種分布式事務(wù)實(shí)現(xiàn)方案的缺點(diǎn)是:
[0006]第一種,利用商用的應(yīng)用服務(wù)器實(shí)現(xiàn)分布式事務(wù),需要購買商用應(yīng)用服務(wù)器的授權(quán),代價(jià)相對(duì)昂貴。
[0007]第二種,利用將涉及多個(gè)數(shù)據(jù)源的多個(gè)操作封裝為一個(gè)事務(wù)的方式雖然能夠?qū)崿F(xiàn)分布式事務(wù),但是針對(duì)不同數(shù)據(jù)源的多個(gè)操作必須順序執(zhí)行,整個(gè)系統(tǒng)的性能會(huì)因此受到影響。
【發(fā)明內(nèi)容】
[0008]本發(fā)明提供了一種實(shí)現(xiàn)分布式事務(wù)的方法,能夠?qū)崿F(xiàn)針對(duì)多個(gè)數(shù)據(jù)源的事務(wù)并發(fā)進(jìn)行,且無需使用專門的商用應(yīng)用服務(wù)器。
[0009]本發(fā)明提供了一種實(shí)現(xiàn)分布式事務(wù)的裝置,能夠?qū)崿F(xiàn)針對(duì)多個(gè)數(shù)據(jù)源的事務(wù)并發(fā)進(jìn)行,且無需使用專門的商用應(yīng)用服務(wù)器。
[0010]本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
[0011]一種實(shí)現(xiàn)分布式事務(wù)的方法,包括:
[0012]設(shè)置N個(gè)子線程,每個(gè)子線程負(fù)責(zé)處理分布式事務(wù)中的一個(gè)事務(wù);其中,各個(gè)事務(wù)針對(duì)不同的數(shù)據(jù)源,每個(gè)事務(wù)包括針對(duì)該數(shù)據(jù)源的一個(gè)以上操作;
[0013]初始化CountDownLatch類,將所述CountDownLatch類計(jì)數(shù)器的初始值設(shè)置為N ;
[0014]主線程調(diào)用CountDownLatch類的await方法;
[0015]分別啟動(dòng)所述N個(gè)子線程;當(dāng)一個(gè)子線程執(zhí)行完成時(shí),調(diào)用CountDownLatch類的countDown方法,使得所述CountDownLatch類計(jì)數(shù)器的值減I ;
[0016]當(dāng)所述CountDownLatch類計(jì)數(shù)器的值為O時(shí),繼續(xù)執(zhí)行所述主線程。
[0017]上述方法可以進(jìn)一步包括:當(dāng)一個(gè)子線程執(zhí)行出現(xiàn)異常時(shí),將已經(jīng)執(zhí)行完畢的所有子線程回滾,并將所述CountDownLatch類計(jì)數(shù)器的值設(shè)置為O。
[0018]當(dāng)所有子線程執(zhí)行完成并且CountDownLatch類的計(jì)數(shù)器減至O時(shí),記錄所述分布式事務(wù)為成功狀態(tài);
[0019]當(dāng)子線程執(zhí)行出現(xiàn)異常時(shí),記錄所述分布式事務(wù)為失敗狀態(tài)。
[0020]一種實(shí)現(xiàn)分布式事務(wù)的裝置,包括:
[0021]初始化模塊,用于設(shè)置N個(gè)子線程,每個(gè)子線程負(fù)責(zé)處理分布式事務(wù)中的一個(gè)事務(wù);其中,各個(gè)事務(wù)針對(duì)不同的數(shù)據(jù)源,每個(gè)事務(wù)包括針對(duì)該數(shù)據(jù)源的一個(gè)以上操作;還用于初始化CountDownLatch類,將所述CountDownLatch類計(jì)數(shù)器的初始值設(shè)置為N ;
[0022]主線程控制模塊,用于控制主線程調(diào)用CountDownLatch類的await方法,當(dāng)所述CountDownLatch類計(jì)數(shù)器的值為O時(shí),繼續(xù)執(zhí)行所述主線程;
[0023]子線程控制模塊,用于分別啟動(dòng)所述N個(gè)子線程;當(dāng)一個(gè)子線程執(zhí)行完成時(shí),調(diào)用CountDownLatch類的countDown方法,使得所述CountDownLatch類計(jì)數(shù)器的值減I。
[0024]上述裝置中,子線程控制模塊還可以用于,當(dāng)一個(gè)子線程執(zhí)行出現(xiàn)異常時(shí),將已經(jīng)執(zhí)行完畢的所有子線程回滾,并將所述CountDownLatch類計(jì)數(shù)器的值設(shè)置為O。
[0025]當(dāng)所有子線程執(zhí)行完成并且CountDownLatch類的計(jì)數(shù)器減至O時(shí),記錄所述分布式事務(wù)為成功狀態(tài);當(dāng)子線程執(zhí)行出現(xiàn)異常時(shí),記錄所述分布式事務(wù)為失敗狀態(tài)。
[0026]可見,本發(fā)明提出的實(shí)現(xiàn)分布式事務(wù)的方法和裝置,設(shè)置N個(gè)子線程,每個(gè)子線程負(fù)責(zé)處理分布式事務(wù)中的一個(gè)事務(wù),并且通過CountDownLatch類來實(shí)現(xiàn)N個(gè)子線程同步執(zhí)行,從而實(shí)現(xiàn)了針對(duì)多個(gè)數(shù)據(jù)源的多個(gè)分布式事務(wù)并發(fā)進(jìn)行。
【專利附圖】
【附圖說明】
[0027]圖1為現(xiàn)有技術(shù)中分布式事務(wù)的實(shí)現(xiàn)方式;
[0028]圖2為本發(fā)明提出的實(shí)現(xiàn)分布式事務(wù)的方法流程圖;
[0029]圖3為本發(fā)明實(shí)施例一的實(shí)現(xiàn)流程圖。
【具體實(shí)施方式】
[0030]本發(fā)明提出一種實(shí)現(xiàn)分布式事務(wù)的方法,如圖2為該方法實(shí)現(xiàn)流程圖,包括:
[0031]步驟201:設(shè)置N個(gè)子線程,每個(gè)子線程負(fù)責(zé)處理分布式事務(wù)中的一個(gè)事務(wù);其中,各個(gè)事務(wù)針對(duì)不同的數(shù)據(jù)源,每個(gè)事務(wù)包括針對(duì)該數(shù)據(jù)源的一個(gè)以上操作;
[0032]初始化CountDownLatch類,將所述CountDownLatch類計(jì)數(shù)器的初始值設(shè)置為N。
[0033]步驟202:主線程調(diào)用CountDownLatch類的await O方法。await O方法是await方法的一種表不方式。
[0034]步驟203:分別啟動(dòng)所述N個(gè)子線程;當(dāng)一個(gè)子線程執(zhí)行完成時(shí),調(diào)用CountDownLatch類的countDown()方法,使得所述CountDownLatch類計(jì)數(shù)器的值減I。countDown O方法是countDown方法的一種表示方式。
[0035]步驟204:當(dāng)CountDownLatch類計(jì)數(shù)器的值為O時(shí),繼續(xù)執(zhí)行主線程。
[0036]上述方法可以進(jìn)一步包括:當(dāng)一個(gè)子線程執(zhí)行出現(xiàn)異常時(shí),將已經(jīng)執(zhí)行完畢的所有子線程回滾,并將所述CountDownLatch類計(jì)數(shù)器的值設(shè)置為O。
[0037]當(dāng)所有子線程執(zhí)行完成并且CountDownLatch類的計(jì)數(shù)器減至O時(shí),記錄所述分布式事務(wù)為成功狀態(tài);
[0038]當(dāng)子線程執(zhí)行出現(xiàn)異常時(shí),記錄所述分布式事務(wù)為失敗狀態(tài)。[0039]以下結(jié)合附圖,舉具體的實(shí)施例詳細(xì)介紹。
[0040]實(shí)施例一:
[0041]涉及到每個(gè)數(shù)據(jù)源的每個(gè)操作或者多個(gè)操作都是單獨(dú)的一個(gè)事務(wù)。本實(shí)施例利用CountDownLatch類來實(shí)現(xiàn)這些事務(wù)的并發(fā)處理,當(dāng)有一個(gè)或者事務(wù)操作失敗或者出現(xiàn)異常時(shí),將所有的事務(wù)回滾。
[0042]CountDownLatch類是一個(gè)同步計(jì)數(shù)器,構(gòu)造時(shí)傳入int參數(shù),該參數(shù)就是計(jì)數(shù)器的初始值,每調(diào)用一次countDown O方法,計(jì)數(shù)器減I ;計(jì)數(shù)器大于O時(shí),await O方法會(huì)阻塞程序繼續(xù)執(zhí)行。CountDownLatch可以看作是一個(gè)倒計(jì)數(shù)的鎖存器,當(dāng)計(jì)數(shù)減至O時(shí)觸發(fā)特定的事件。利用這種特性,可以讓主線程等待子線程的結(jié)束。
[0043]CountDownLatch類的一個(gè)非常典型的應(yīng)用場(chǎng)景是:有一個(gè)任務(wù)需要往下執(zhí)行,但必須要等到其他的任務(wù)執(zhí)行完畢后才可以繼續(xù)往下執(zhí)行。這個(gè)需要繼續(xù)往下執(zhí)行的任務(wù)調(diào)用一個(gè)CountDownLatch類的await O方法,其他的任務(wù)執(zhí)行完自己的任務(wù)后調(diào)用同一個(gè)CountDownLatch類的countDownO方法;這個(gè)調(diào)用await()方法的任務(wù)將一直阻塞等待,直到這個(gè)CountDownLatch類的計(jì)數(shù)值減到O為止。
[0044]在本實(shí)施例中,分布式事務(wù)的個(gè)數(shù)為N,每個(gè)事務(wù)涉及一個(gè)數(shù)據(jù)源,包括針對(duì)該數(shù)據(jù)源的一個(gè)或多個(gè)操作。當(dāng)有一個(gè)主線程,需要等到這些涉及到N個(gè)數(shù)據(jù)源的N個(gè)事務(wù)都完成才能繼續(xù)運(yùn)行的時(shí)候,就可以利用CountDownLatch類來實(shí)現(xiàn)。
[0045]如圖3為本實(shí)施例的實(shí)現(xiàn)流程圖,包括:
[0046]步驟301:設(shè)置N個(gè)子線程,每個(gè)子線程負(fù)責(zé)處理一個(gè)事務(wù)。初始化CountDownLatch類,傳入N作為CountDownLatch類的計(jì)數(shù)器的初始值。
[0047]步驟302:主線程調(diào)用CountDownLatch類的await O方法。由于此時(shí)CountDownLatch類計(jì)數(shù)器的值不為O,故主線程阻塞等待。
[0048]步驟303:分別啟動(dòng)上述N個(gè)子線程,用于分別處理上述N個(gè)事務(wù);當(dāng)一個(gè)子線程執(zhí)行完成時(shí),調(diào)用CountDownLatch類的countDown O方法,使得CountDownLatch類計(jì)數(shù)器的值減I ;當(dāng)CountDownLatch類計(jì)數(shù)器的值減至O時(shí),記錄整個(gè)分布式事務(wù)為成功狀態(tài),繼續(xù)執(zhí)行步驟304。
[0049]如果子線程執(zhí)行出現(xiàn)異常,則將已經(jīng)執(zhí)行完畢的所有子線程回滾(也就是將已經(jīng)提交的事務(wù)進(jìn)行回滾),記錄整個(gè)分布式事務(wù)為失敗狀態(tài),繼續(xù)執(zhí)行步驟304。
[0050]步驟304:繼續(xù)執(zhí)行上述主線程。
[0051]本發(fā)明還提出一種實(shí)現(xiàn)分布式事務(wù)的裝置,包括:
[0052]初始化模塊,用于設(shè)置N個(gè)子線程,每個(gè)子線程負(fù)責(zé)處理分布式事務(wù)中的一個(gè)事務(wù);其中,各個(gè)事務(wù)針對(duì)不同的數(shù)據(jù)源,每個(gè)事務(wù)包括針對(duì)該數(shù)據(jù)源的一個(gè)以上操作;還用于初始化CountDownLatch類,將所述CountDownLatch類計(jì)數(shù)器的初始值設(shè)置為N ;
[0053]主線程控制模塊,用于控制主線程調(diào)用CountDownLatch類的await方法,當(dāng)所述CountDownLatch類計(jì)數(shù)器的值為O時(shí),繼續(xù)執(zhí)行所述主線程;
[0054]子線程控制模塊,用于分別啟動(dòng)所述N個(gè)子線程;當(dāng)一個(gè)子線程執(zhí)行完成時(shí),調(diào)用CountDownLatch類的countDown方法,使得所述CountDownLatch類計(jì)數(shù)器的值減I。
[0055]上述子線程控制模塊還可以用于,當(dāng)一個(gè)子線程執(zhí)行出現(xiàn)異常時(shí),將已經(jīng)執(zhí)行完畢的所有子線程回滾,并將所述CountDownLatch類計(jì)數(shù)器的值設(shè)置為O。[0056]當(dāng)所有子線程執(zhí)行完成并且CountDownLatch類的計(jì)數(shù)器減至O時(shí),記錄所述分布式事務(wù)為成功狀態(tài);當(dāng)子線程執(zhí)行出現(xiàn)異常時(shí),記錄所述分布式事務(wù)為失敗狀態(tài)。
[0057]綜上可見,本發(fā)明提出的實(shí)現(xiàn)分布式事務(wù)的方法和裝置,設(shè)置多個(gè)子線程用于分別處理分布式事務(wù)中的一個(gè)事務(wù),通過CountDownLatch類實(shí)現(xiàn)子線程的并發(fā)進(jìn)行,從而能夠?qū)崿F(xiàn)多個(gè)分布式事務(wù)的并發(fā)進(jìn)行,提高系統(tǒng)的性能,提升用戶體驗(yàn)。
[0058]以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
【權(quán)利要求】
1.一種實(shí)現(xiàn)分布式事務(wù)的方法,其特征在于,所述方法包括: 設(shè)置N個(gè)子線程,每個(gè)子線程負(fù)責(zé)處理分布式事務(wù)中的一個(gè)事務(wù);其中,各個(gè)事務(wù)針對(duì)不同的數(shù)據(jù)源,每個(gè)事務(wù)包括針對(duì)該數(shù)據(jù)源的一個(gè)以上操作; 初始化CountDownLatch類,將所述CountDownLatch類計(jì)數(shù)器的初始值設(shè)置為N ; 主線程調(diào)用CountDownLatch類的await方法; 分別啟動(dòng)所述N個(gè)子線程;當(dāng)一個(gè)子線程執(zhí)行完成時(shí),調(diào)用CountDownLat ch類的countDown方法,使得所述CountDownLatch類計(jì)數(shù)器的值減I ; 當(dāng)所述CountDownLatch類計(jì)數(shù)器的值為O時(shí),繼續(xù)執(zhí)行所述主線程。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法進(jìn)一步包括:當(dāng)一個(gè)子線程執(zhí)行出現(xiàn)異常時(shí),將已經(jīng)執(zhí)行完畢的所有子線程回滾,并將所述CountDownLatch類計(jì)數(shù)器的值設(shè)置為O。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述方法進(jìn)一步包括:當(dāng)所有子線程執(zhí)行完成并且CountDownLatch類的計(jì)數(shù)器減至O時(shí),記錄所述分布式事務(wù)為成功狀態(tài); 當(dāng)子線程執(zhí)行出現(xiàn)異常時(shí),記錄所述分布式事務(wù)為失敗狀態(tài)。
4.一種實(shí)現(xiàn)分布式事務(wù)的裝置,其特征在于,所述裝置包括: 初始化模塊,用于設(shè)置N個(gè)子線程,每個(gè)子線程負(fù)責(zé)處理分布式事務(wù)中的一個(gè)事務(wù);其中,各個(gè)事務(wù)針對(duì)不同的數(shù)據(jù)源,每個(gè)事務(wù)包括針對(duì)該數(shù)據(jù)源的一個(gè)以上操作;還用于初始化CountDownLatch類,將所述CountDownLatch類計(jì)數(shù)器的初始值設(shè)置為N ; 主線程控制模塊,用于控制主線程調(diào)用CountDownLatch類的await方法,當(dāng)所述CountDownLatch類計(jì)數(shù)器的值為O時(shí),繼續(xù)執(zhí)行所述主線程; 子線程控制模塊,用于分別啟動(dòng)所述N個(gè)子線程;當(dāng)一個(gè)子線程執(zhí)行完成時(shí),調(diào)用CountDownLatch類的countDown方法,使得所述CountDownLatch類計(jì)數(shù)器的值減I。
5.根據(jù)權(quán)利要求4所述的裝置,其特征在于,所述子線程控制模塊還用于,當(dāng)一個(gè)子線程執(zhí)行出現(xiàn)異常時(shí),將已經(jīng)執(zhí)行完畢的所有子線程回滾,并將所述CountDownLatch類計(jì)數(shù)器的值設(shè)置為O。
6.根據(jù)權(quán)利要求4所述的裝置,其特征在于,所述子線程控制模塊還用于,當(dāng)所有子線程執(zhí)行完成并且CountDownLatch類的計(jì)數(shù)器減至O時(shí),記錄所述分布式事務(wù)為成功狀態(tài);當(dāng)子線程執(zhí)行出現(xiàn)異常時(shí),記錄所述分布式事務(wù)為失敗狀態(tài)。
【文檔編號(hào)】G06F9/46GK103631647SQ201310655744
【公開日】2014年3月12日 申請(qǐng)日期:2013年12月6日 優(yōu)先權(quán)日:2013年12月6日
【發(fā)明者】郭永強(qiáng), 易旭 申請(qǐng)人:北京京東尚科信息技術(shù)有限公司, 北京京東世紀(jì)貿(mào)易有限公司