設計模式之單例模式讀後思考,設計模式讀後

來源:互聯網
上載者:User

設計模式之單例模式讀後思考,設計模式讀後

    上篇:我複習了6大原則, 睡覺前還想了一陣子, 我分析了一下, 想要牢記這些原則, 就必須動手寫一些項目

 學習地址 http://www.cnblogs.com/zuoxiaolong/p/pattern2.html

    我記得我學習6大原則看了一個月, 這次這個單例模式 只看了4天, 有一點推動力感覺還是可以的

    我自己的理解:

    單例模式,原文: 指的是一個類在整個應用中, 有且只有一種狀態.

        本人理解: 類只有一個, 所有調用者拿到的都是這個類, 調用者的修改是阻塞的, 調用者的查詢是非阻塞的,

        單例模的應用情境基本都是在是可變共用

    原文中有個讓cpu飆升的測試單例的方法, TestSinglenton 這個測試方法 ,主要問題出在lock這個變數上, 在前面加上volatile這個變數, 保證可見度,

其實加了volatile cpu也會飆升, 但是結果可以及時列印出來

    但是沒加的話結果卡住,原因是什麼,lock這個變數沒有了可見度, 我推斷lock.isLock()一直拿的是false, 所有的子線程一直沒有擷取到新的lock導致一直在迴圈

這時我就有個疑問了, 理論上在主線程我們改變lock的值, 但是這裡顯然, 子線程依然沒有擷取到我們想要的那個值, 難道說, lock之前的值依然沒有被gc掉 

我加了一小段代碼檢驗的一番

while (true) {System.out.println("----"+lock.isLock()+"1------");System.out.println("----"+lock.isLock()+"2------");System.out.println("----"+lock.isLock()+"3------");.....}

    結果,很震驚, 同一個線程下取到的lock值居然不一樣, 並且 lock1總是初始值 lock3的數量>lock2, 這裡感覺像 線程看著lock的值從true變成false 

    這5列代表5個線程

    

    一個漸漸層化的過程,  等看完jvm再詳細分析一波, 實際上是不是這樣的呢?

    終於, 我在java並發實戰中找到了這個答案,

  

     但是在實際的我還是發現的一個問題, 如果我沒有列印這個lock, 那麼lock.isLock始終拿的是true, 一直在迴圈

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.