程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java-並發-高級並發對象2,java-並發對象

java-並發-高級並發對象2,java-並發對象

編輯:JAVA綜合教程

java-並發-高級並發對象2,java-並發對象


浏覽以下內容前,請點擊並閱讀 聲明

並發集合

  java.util.concurrent包包含了許多對於java集合框架的補充,根據提供的接口可以將這些集合分為以下幾類:

  • BlockingQueue 定義了先進先出(first in first out)的數據結構,如果對一個滿的對列添加元素或者從一個空的對列中檢索元素,則會造成超時,或者被阻隔。
  • ConcurrentMap 是java.util.Map的子接口,定義了一些原子操作。這些原子操作可以移除或者替換掉一個存在的鍵值對,或者增加一個鍵不存在(鍵不存在)的鍵值對。原子操作可以避免使用同步。通用的ConcurrentMap的實現是ConcurrentHashMap,其為HashMap的並發同義詞。
  • ConcurrentNavigableMap 是ConcurrentMap的子接口,支持近似匹配,標准的通用實現為ConcurrentSkipListMap,是TreeMap的並發同義詞。

  所有的這些集合可以通過在添加對象到集合的動作和後續的訪問和移除動作間建立發生前關系幫助避免內存一致性錯誤。

原子變量

  java.util.concurrent.atomic包定義了支持對於一個變量進行原子操作的類,其中所有的類都含有讀和寫的set和get方法,如同讀寫volatile變量一樣,也就是說,對於同一個變量對應的set方法和接下來的get方法具有發生前關系。原子方法compareAndSet也具有這些內存一致性特征,就像對於整型原子變量使用的原子算數方法一樣。原子變量使用方法如下例:

import java.util.concurrent.atomic.AtomicInteger;

class AtomicCounter {
//定義原子字段
    private AtomicInteger c = new AtomicInteger(0);

    public void increment() {
        c.incrementAndGet();
    }

    public void decrement() {
        c.decrementAndGet();
    }
//返回基本類型
    public int value() {
        return c.get();
    }

}

   並發隨機數字

  JDK7中,java.util.concurrent包含一個方便的類,ThreadLocalRandom,因為有些程序希望在多個線程或者ForkJoinTask中使用隨機數字,對於並發的訪問,使用ThreadLocalRandom相對於Math.random()可以減少資源爭奪,最終獲得更優的性能。

  使用ThreadLocalRandom,只需要調用其靜態方法current方法即可獲得一個ThreadLocalRandom對象,然後再調用其中的一個方法獲得一個隨機數:

//nextInt方法可以指定兩個整數以作上限和下限,以下返回4到77的隨機整數
int r = ThreadLocalRandom.current().nextInt(4, 77);

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved