談一談編程中遇到的一些死迴圈(遞迴死迴圈,AOP死迴圈,業務死迴圈)

來源:互聯網
上載者:User

標籤: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死迴圈,業務死迴圈)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.