把同步的代碼塊切成異步的方法之Taskexecutor

業務場景:

比如你有個業務的方法裏,需要處理一大堆邏輯,還要再調用一下另外一個系統的接口通知數據的變更,最後這個業務方法處理的數據還要入庫,這時候,如果你把數據庫的修改操作放到代碼的中間,最後再調別人的接口,就會出現問題,如果別人的接口特別慢或者網絡波動太大,就會導致你的數據沒保存,但是事務一直開着。就是個大事務,拖累整個系統。

如下面的僞代碼:

但是你要是把調用其他接口的代碼放到上面,又會有另一個問題,比如你調人家接口都成功啦,但是你自己的業務邏輯沒走通,比如校驗失敗了,那就是大bug了。

如下面的僞代碼:

解決方案:

那麼我們應該怎麼做才能解決上面的問題呢?

如下面的僞代碼:

上面的思路是在你的業務邏輯都走完了,改庫操作也沒有問題,這個時候單獨起個線程去掉其他的接口。你的事務就結束了,也能保證調其他接口的時候數據的正確性。

知識補充:寫個小demo驗證下taskexecutor是否是開啓一個線程,代碼如下

如上圖所示,taskExecutor的確會開啓一個新的線程。

總結:

在實際開發的業務中,如果我們既需要自己往自己的數據庫插入數據,又需要通知其他系統,這時候爲了不耽誤主業務的進行就可以通過上面的方法開啓一個線程把同步方法切換成異步的代碼塊。我是阿達,一名喜歡分享知識的程序員,時不時的也會荒腔走板的聊一聊電影、電視劇、音樂、漫畫,這裏已經有17位小夥伴在等你們啦,感興趣的就趕緊來點擊關注我把,哪裏有不明白或有不同觀點的地方歡迎留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章