原创 ReentrantLock實現源碼剖析
作爲一個可重入的獨佔鎖,ReentrantLock與隱式監控鎖synchronized有着相同的行爲和語義,不過ReentrantLock有着更高的擴展性。 簡介 ReentrantLock由上一次成功獲取鎖,但還沒有釋放
原创 CountDownLatch & CyclicBarrier源碼實現解析
CountDownLatch CountDownLatch允許一條或者多條線程等待直至其它線程完成以系列的操作的輔助同步器。 用一個指定的count值對CountDownLatch進行初始化。await方法會阻塞,直至因爲調
原创 Exchanger源碼剖析
Exchanger是一個針對線程可以結對交換元素的同步器。每條線程把某個對象作爲參數調用exchange方法,與夥伴線程進行匹配,然後再函數返回的時接收夥伴的對象。另外,Exchanger內部實現採用的是無鎖算法,能夠大大提高多線
原创 也談向Richedit插入動態Gif的實現(轉載)
http://www.deadc0de.com/archives/insert-gif-to-richedit.html#more-14 最近在做IM軟件,需要實現向Richedit插入表情,表情是動態的GIF圖像。 由於以前沒有做
原创 Semaphore實現源碼剖析
Semaphore是一個計數的信號量。從概念上來說,信號量維持一組許可(permits)。acquire方法在必須的時候都會阻塞直到有一個許可可用,然後就會拿走這個許可。release方法添加一個許可,會有可能釋放一個阻塞中的獲取者(ac
原创 關於Java重載方法時的可用修飾符
一、final在重載參數的可用性 之前在寫代碼的時候,在一個重載方法裏由於用到裏Runnable匿名類,需要對參數進行final指定,由於基類的參數都沒有final修飾符,基類的函數原型如下: public abstract void
原创 智能指針的研究
由於C++中堆內存是由程序員自己管理,要把對象分配在堆中,必須手動調用new,並且必須記住調用delete釋放之前分配的內存。大量的new和delete必定會造成代碼十分混亂,並且很容易出現懸空指針和內存泄漏等問題,smart p
原创 Phaser實現源碼剖析
Phaser是一個可以重複利用的同步柵欄,功能上與CyclicBarrier和CountDownLatch相似,不過提供更加靈活的用法。也就是說,Phaser的同步模型與它們差不多。一般運用的場景是一組線程希望同時到達某個執行點後
原创 ReentrantReadWriteLock實現源碼剖析
ReentrantReadWriteLock提供了一個讀寫鎖的實現,並且有着ReentrantLock相似的語義。 簡介 非公平策略 此模式下,讀寫鎖獲取的順序是不確定的,服從於可重入的限制。不公平鎖意味着持續的競爭可能會
原创 java併發包源碼剖析 - 序章
爲了更好地理解併發,因此決定對java的整個併發包進行源碼程度剖析。 首先介紹一下整個併發包的大體情況。主要分爲三個包 1.java.util.concurrent 包括一些規範化可擴展的框架,即Executor
原创 AbstractQueuedSynchronizer實現源碼解析(二)
在前面分析了獨佔模式獲取鎖和釋放鎖的流程,接下來將進行共享模式的獲取鎖和釋放鎖的分析。 這裏說明一下,不同線程能夠獲取共享模式的鎖,但此時如果有線程嘗試獲取獨佔模式的鎖則會失敗,同理,當單一線程獲取來獨佔模式的鎖之後,此時
原创 簡單分析ThreadPoolExecutor實現的1.6版和1.7版之間的不同
ThreadPoolExecutor,簡單來說就是一個線程池的Java實現,通過不同的參數可以達到不同的線程維護策略,在構造函數裏,提供以下參數: 1. corePoolSize。核心線程數。永久保留在線程池的線程數,即使處於空閒也不會被
原创 AbstractQueuedSynchronizer實現源碼解析(一)
AbstractQueuedSynchronizer簡介 AbstractQueuedSynchronizer(AQS)是實現依賴於FIFO等待隊列的阻塞鎖定或者相關同步器(ReentrantLock, Semaphore等)的一
原创 AbstractQueuedSynchronizer實現源碼解析(三)
前兩部分,已經剖析了獨佔模式和共享模式下的獲取鎖以及釋放鎖的過程,接下來就是AQS最後的一個實現部分,Condition的實現。 AQS框架在內部提供兩一個ConditionObject類,給其它獨佔鎖提供Conditio
原创 一個基於AbstractQueuedSynchronizer類的Java的Mutex類的實現
之前由於需要查看了ThreadPoolExecutor的實現,然後發現了內部的封裝工作線程的Worker類繼承自AbstractQueuedSynchronizer類,查了一下,發現這個類封裝了典型的併發鎖操作,是java併發庫j