上一篇 <<<Synchronized鎖
下一篇 >>>Java基礎(chǔ)-對象布局
Lock鎖基本的實現(xiàn)方法
- void lock() ---獲取鎖 如果沒有獲取到鎖則阻塞等待小泉。
- void lockInterruptibly --- 和lock一樣 但是可以阻塞線程 可以中斷
- tryLock()---非阻塞式獲取鎖帅韧,如果獲取到鎖則返回true鼻听,沒有獲取到鎖返回false
- tryLock(timeout, TimeUnit timeUnit)--- 帶有超時時間獲取鎖
- void unlock()---釋放鎖
Lock鎖實現(xiàn)原理
通過AQS+LockSupport+Cas實現(xiàn)
Lock鎖是樂觀+悲觀的結(jié)合體先蒋,悲觀是通過locksupport實現(xiàn)。
Lock鎖原理 基于javaAQS類封裝 在獲取鎖的時候AQS類中有一個狀態(tài)state+1,當前線程不斷重入的時候都會不斷1+愧捕,當在釋放鎖的時候state-1量九;最終state為0 該鎖沒有被任何線程獲取到,沒有搶到鎖的線程估蹄,會存在一個雙向的鏈表中塑煎。
相關(guān)文章鏈接:
<<<多線程基礎(chǔ)
<<<線程安全與解決方案
<<<鎖的深入化
<<<鎖的優(yōu)化
<<<Java內(nèi)存模型(JMM)
<<<Volatile解決JMM的可見性問題
<<<Volatile的偽共享和重排序
<<<CAS無鎖模式及ABA問題
<<<Synchronized鎖
<<<AQS同步器
<<<Condition
<<<CountDownLatch同步計數(shù)器
<<<Semaphore信號量
<<<CyclicBarrier屏障
<<<線程池
<<<并發(fā)隊列
<<<Callable與Future模式
<<<Fork/Join框架
<<<Threadlocal
<<<Disruptor框架
<<<如何優(yōu)化多線程總結(jié)