1餐曼,回顧
到目前,我們講了3個(gè)跟多個(gè)線程操作一個(gè)資源的技術(shù)點(diǎn)德频,主要涉及以下幾個(gè)點(diǎn):
synchronized:原子性苍息,重量級(jí)鎖
volatile:可見性,不保證原子性
采用JDK提供的原子類
2壹置,Lock
在JDK1.5后竞思,為我們提供了Lock接口
主要有三個(gè)特點(diǎn)
1,明確加鎖和解鎖
lock()钞护,unlock()
public class LockTest {
? ? private Lock lock = new ReentrantLock();
????public void lockTest(){
????????try{
????????????lock.lock();
????????????System.out.println("do something...");
????????}finally{
????????????lock.unlock();
????????}
????}
}
2盖喷,可以嘗試訪問鎖
tryLock()
3,可以構(gòu)建公平鎖患亿,解決我們之前說的饑餓問題传蹈,實(shí)現(xiàn)公平性
采用Lock的實(shí)現(xiàn)類ReentrantLock可以構(gòu)建公平鎖
Lock lock = new ReentrantLock(true);//true就是為公平鎖 fair
思考題:
如何實(shí)現(xiàn)一個(gè)自己的Lock押逼?以及實(shí)現(xiàn)可重入?