<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,  comments - 11,  trackbacks - 0

    1,保證線程安全的三種方法:
    ??? a,不要跨線程訪問共享變量

    ??? b,使共享變量是
    final類型的
    ??? c,將共享變量的操作加上同步


    2,一開始就將類設計成線程安全的
    ,比在后期重新修復它,更容易.

    3,編寫多線程程序
    ,首先保證它是正確的,其次再考慮性能
    .

    4,無狀態或只讀對象永遠是線程安全的
    .

    5,不要將一個共享變量裸露在多線程環境下
    (無同步或不可變性保護
    )

    6,多線程環境下的延遲加載需要同步的保護
    ,因為延遲加載會造成對象重復實例化


    7,對于
    volatile 聲明的數值類型變量進行運算,往往是不安全的(volatile 只能保證可見性, 不能保證原子性).
    詳見
    volatile 原理與技巧中,臟數據問題討論
    .

    8,當一個線程請求獲得它自己占有的鎖時
    ( 同一把鎖的嵌套使用),我們稱該鎖為可重入鎖.
    jdk1.5 并發包中,提供了可重入鎖的java 實現
    -ReentrantLock.

    9,每個共享變量
    , 都應該由一個唯一確定的鎖保護.
    創建與變量相同數目的
    ReentrantLock,使他們負責每個變量的線程安全
    .

    10,雖然縮小同步塊的范圍
    ,可以提升系統性能.
    但在保證原子性的情況下
    ,不可將原子操作分解成多個synchronized
    .

    11,在沒有同步的情況下
    ,編譯器與處理器運行時的指令執行順序可能完全出乎意料
    .
    原因是
    ,編譯器或處理器為了優化自身執行效率,而對指令進行了的重排序
    (reordering).

    12,當一個線程在沒有同步的情況下讀取變量
    ,它可能會得到一個過期值,但是至少它可以看到那個

    線程在當時設定的一個真實數值
    .而不是憑空而來的值.這種安全保證,稱之為最低限的安全性(out-of-thin-air safety)

    在開發并發應用程序時
    ,有時為了大幅度提高系統的吞吐量與性能,會采用這種無保障的做法
    .
    但是針對
    ,數值的運算,仍舊是被否決的
    .

    13,volatile 變量
    , 只能保證可見性,無法保證原子性
    .

    14,某些耗時較長的網絡操作或IO,確保執行時,不要占有鎖.

    15,發布(publish) 對象,指的是使它能夠被當前范圍之外的代碼所使用.( 引用傳遞
    )
    對象逸出(escape),指的是一個對象在尚未準備好時將它發布.

    原則:為防止逸出,對象必須要被完全構造完后,才可以被發布( 最好的解決方式是采用同步
    )

    this
    關鍵字引用對象逸出

    例子:在構造函數中,開啟線程,并將自身對象this 傳入線程,造成引用傳遞.
    而此時,構造函數尚未執行完,就會發生對象逸出了
    .

    16,必要時,使用ThreadLocal變量確保線程封閉性(封閉線程往往是比較安全的,但一定程度上會造成性能損耗)
    封閉對象的例子在實際使用過程中,比較常見,例如hibernate openSessionInView機制, jdbcconnection機制.

    17,單一不可變對象往往是線程安全的(復雜不可變對象需要保證其內部成員變量也是不可變的)
    良好的多線程編程習慣是:將所有的域都聲明為final,除非它們是可變的

    18,保證共享變量的發布是安全的

    ??? a,
    通過靜態初始化器初始化對象(jls 12.4.2 敘述, jvm 會保證靜態初始化變量是同步的)
    ??? b,
    將對象申明為volatile 或使用
    AtomicReference
    ??? c,
    保證對象是不可變的

    ??? d,
    將引用或可變操作都由鎖來保護

    19,設計線程安全的類,應該包括的基本要素:
    ??? a,確定哪些是可變共享變量
    ??? b,確定哪些是不可變的變量
    ??? c,指定一個管理并發訪問對象狀態的策略

    20,將數據封裝在對象內部,并保證對數據的訪問是原子的
    .
    建議采用volatile javabean 模型或者構造同步的getter,setter.

    21,線程限制性使構造線程安全的類變得更容易,因為類的狀態被限制后,分析它的線程安全性時,就不必檢查完整的程序.

    22,
    編寫并發程序,需要更全的注釋,更完整的文檔說明.

    23,在需要細分鎖的分配時,使用java監視器模式好于使用自身對象的監視器鎖.
    前者的靈活性更好.

    Object target = new Object();
    //這里使用外部對象來作為監視器,而非this
    synchronized(target) {
    ??? // TODO
    }

    針對java monitor pattern,實際上ReentrantLock的實現更易于并發編程.
    功能上,也更強大.

    24,設計并發程序時,在保證伸縮性與性能折中的前提下,優先考慮將共享變量委托給線程安全的類
    .
    由它來控制全局的并發訪問
    .

    25,使用普通同步容器(Vector, Hashtable) 的迭代器,需要外部鎖來保證其原子性
    .
    原因是,普通同步容器產生的迭代器是非線程安全的
    .

    26,在并發編程中,需要容器支持的時候,優先考慮使用jdk 并發容器

    (ConcurrentHashMap, ConcurrentLinkedQueue, CopyOnWriteArrayList...).


    27, ConcurrentHashMap, CopyOnWriteArrayList

    并發容器的迭代器, 以及全范圍的size(), isEmpty()都表現出弱一致性
    .
    他們只能標示容器當時的一個數據狀態.無法完整響應容器之后的變化和修改
    .

    28,
    使用有界隊列,在隊列充滿或為空時,阻塞所有的讀與寫操作. ( 實現生產- 消費的良好方案)

    BlockQueue
    下的實現有LinkedBlockingQueue ArrayBlockingQueue,前者為鏈表,可變操作頻繁優先考慮, 后者為數組,讀取操作頻繁優先考慮.
    PriorityBlockingQueue
    是一個按優先級順序排列的阻塞隊列,它可以對所有置入的元素進行排序( 實現Comparator 接口
    )

    29,
    當一個方法,能拋出InterruptedException,則意味著,這個方法是一個可阻塞的方法,如果它被中斷,將提前結束阻塞狀態
    .
    當你調用一個阻塞方法,也就意味著,本身也稱為了一個阻塞方法,因為你必須等待阻塞方法返回
    .

    如果阻塞方法拋出了中斷異常,我們需要做的是,將其往上層拋,除非當前已經是需要捕獲異常的層次
    .
    如果當前方法,不能拋出InterruptedException,可以使用Thread.currentThread.interrupt() 方法,手動進行中斷.

    ?

    posted on 2011-05-18 22:53 jadmin 閱讀(165) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 狠狠综合久久综合88亚洲| 全免费一级午夜毛片| 中文字幕第13亚洲另类| 日本系列1页亚洲系列| 全免费a级毛片免费**视频| 国产亚洲精品成人AA片| 手机在线免费视频| 亚洲美国产亚洲AV| 日本牲交大片免费观看| 国产精品亚洲色婷婷99久久精品| 在线免费视频一区二区| 污网站在线免费观看| 亚洲精品无码AV中文字幕电影网站| 亚州**色毛片免费观看| 亚洲色自偷自拍另类小说| 久久成人永久免费播放| 亚洲图片一区二区| 成人浮力影院免费看| 亚洲日韩久久综合中文字幕| 欧洲美熟女乱又伦免费视频| 美女羞羞喷液视频免费| 国内精品99亚洲免费高清| 午夜免费福利小电影| 亚洲娇小性xxxx| 四虎精品亚洲一区二区三区| 青柠影视在线观看免费高清 | 可以免费观看一级毛片黄a| 乱人伦中文视频在线观看免费| 亚洲伊人久久精品影院| 中文字幕免费视频| 日韩欧美亚洲国产精品字幕久久久| 亚洲精品无码日韩国产不卡?V| a级成人毛片免费图片| 亚洲av产在线精品亚洲第一站| 国产福利免费在线观看| 国内少妇偷人精品视频免费| 亚洲另类精品xxxx人妖| 一本久久a久久精品亚洲| 无码国产精品一区二区免费式影视| 真人无码作爱免费视频| 亚洲国产精品一区二区久久hs|