說一說java的concurrent包-系列文章
前面一個系列的文章都在圍繞hash展開,今天準備先說下concurrent包,這個系列可能會以使用場景說明爲主,concurrent包本身的代碼分析可能比較少;我在這方面的實踐經驗較爲有限,有錯誤歡迎批評指正
不過前一個系列並未結束,還有一些文章沒有放出來,歡迎關注核桃博客
concurrent包是jdk1.5引入的重要的包,主要代碼由大牛Doug Lea完成,其實是在jdk1.4時代,由於java語言內置對多線程編程的支持比較基礎和有限,所以他寫了這個,因爲實在太過於優秀,所以被加入到jdk之中;
通常所說的concurrent包基本有3個package組成
java.util.concurrent:提供大部分關於併發的接口和類,如BlockingQueue,Callable,ConcurrentHashMap,ExecutorService, Semaphore等
java.util.concurrent.atomic:提供所有原子操作的類,如AtomicInteger, AtomicLong等;
java.util.concurrent.locks:提供鎖相關的類, 如Lock, ReentrantLock, ReadWriteLock, Condition等;
concurrent包的優點:
1. 首先,功能非常豐富,諸如線程池(ThreadPoolExecutor),CountDownLatch等併發編程中需要的類已經有現成的實現,不需要自己去實現一套;畢竟jdk1.4對多線程編程的主要支持幾乎就只有Thread, Runnable,synchronized等
2. concurrent包裏面的一些操作是基於硬件級別的CAS(compare and swap),就是在cpu級別提供了原子操作,簡單的說就可以提供無阻塞、無鎖定的算法;而現代cpu大部分都是支持這樣的算法的;