標籤:tps 分享圖片 事務 proxy 邏輯 關於 內容 get aop
最簡單最基礎死迴圈,一般都是這樣的
while(1) while(true) for( ; ; )……
然而在編程中常常會用到一些並不是那麼基礎的死迴圈,
這裡列舉一些我在編程中所遇到的一些死迴圈
方法已經不記得了,只是大概說明。
1(遞迴死迴圈)
2(AOP死迴圈)
這個是遞迴死迴圈的變種
學習Spring的同學都知道AOP面向切面編程,
記得網上讀過一篇部落格說的是Spring中實現AOP不僅用到了jdk1.6的動態Proxy還使用了CGLIB。就可以實現介面和實體類都能被動態代理。
對動態代理一直不太瞭解。有天閑著無聊就試著瞭解一下:
CGLIB(Code Generation Library)詳解
70238002
自己在網上找了幾篇文章看了一下,自己動手試試寫個 JDBC的事務註解 Transaction
這張圖不知道能不能大概說明意思,意思大概就是使用CGLIB進行動態代理的時候,注意盡量別調用被代理對象的toString方法。否則會間接遞迴死迴圈。
3(檔案狀態更新死迴圈,這個有點極端,可能大家不會碰見)
這個是商務邏輯的系迴圈
大二的時候學安卓,用的是AndroidStudio 當時學校有一個比賽聯想智能交通的比賽,需要三個人用安卓坐一個app。當時思考一個問題,三個人做一個app一定在一個區域網路下做一個app的,那麼我能不能做個軟體讓三個人同時去操作一個項目。
思路是這樣的:
後台運行一個線程一直去遍曆一個指定的項目內的所有檔案。如果一個檔案的檔案內容近期更改過。那就把檔案發給好友。好友把更改的檔案內容寫入到檔案上去即可,。當然這些讀寫內容也都是後台線程完成的。
後來呢,這個東西的確也做出來了,但是呢,有編碼問題,後來就沒再管了。
同時裡面有關於死迴圈的兩個問題值得思考
(1)子線程中就需要一個死迴圈,這個死迴圈的做用就是用來一直遍曆檔案和查看檔案更改狀態。當然這個死迴圈是一個正常的死迴圈,是我們所需要的死迴圈,無非就是損耗了軟體的效能
後來在網上查到一個檔案監聽器的類。
WatchService watcher = FileSystems.getDefault().newWatchService();
這個類使用了觀察者模式。不需要再使用死迴圈了,無疑提高了軟體的效能。
(2)另一個死迴圈發生在檔案讀寫時。
本來時當檔案發生改變的時候傳送檔案到好友哪裡去,由於每個用戶端有相同的功能。
那麼問題就出在這裡,當A的檔案發生改變時,發送到B上去後,B把能讓更新到本地後那麼本地檔案又發生了改變,B就會把這個跟A一模一樣的檔案再此發生給A。導致檔案狀態更改引發死迴圈。
談一談編程中遇到的一些死迴圈(遞迴死迴圈,AOP死迴圈,業務死迴圈)