基礎:需要熟悉juc工具包以及底層的cas原理和aqs
接下來我們正入主題
第一種最簡單的方法,使用工具類來實現簡單的同步
我們可以使用atomicreference來操作當前,當然也可以使用semaphore,阻塞佇列等,這樣可以實現簡單的鎖,達到同步的效果。
public class ablelock
}public void unlock()
}
接下來我們測試一下
public class testlock
public int getcount()
public static void main(string args) throws interruptedexception
});thread.start();
//先讓其他的執行緒執行,最後主線程再輸出count的值
thread.join();
}system.out.println("count的值是"+testlock.getcount());}}
可以看出我們的結果已經達到了,但是這樣的鎖功能沒有那麼強大,只能實現簡單的同步,不可重入,太多缺陷
第二種就是通過實現lock介面,定義乙個內部類,通過繼承aqs(abstractqueuedsynchronizer)類達到排它鎖,這裡涉及到了模板設計模式
內部類繼承aqs後,需要重寫這幾個方法
isheldexclusively()
tryacquire(int arg)
tryrelease(int arg)
public class selflock implements lock
@override
protected boolean tryacquire(int arg)
return false;
}@override
protected boolean tryrelease(int arg)
setexclusiveownerthread(null);
setstate(0);
return true;
}public condition newcondition()
}private sync sync=new sync();
@override
public void lock()
@override
public void lockinterruptibly() throws interruptedexception
@override
public boolean trylock()
@override
public boolean trylock(long time, timeunit unit) throws interruptedexception
@override
public void unlock()
@override
public condition newcondition()
}
這樣也就實現了鎖的效果 java執行緒Lock的wait
如果lock在lock.lock 之後進入lock.wait 那麼所有的獲取lock.lock 的 都會被阻塞。但是synchronized lock 這個 可以被執行,且只有執行喚醒之後才能使得程式繼續走。看 class r1 implements runnable catch interrupt...
Java多執行緒 Lock
reentrantlock可以和synchronized達到一樣的效果,並且擴充套件功能上也更加強大,而且使用更加靈活。lock lock new reentrantlock 加鎖 lock.lock 取消鎖 lock.unlock 等待通知模式 synchronized與wait 和notify方...
自己動手寫bootloader
原始出處 作者資訊和本宣告。否則將追究法律責任。為了寫乙個bootloader讓板子跑起來,首先我們要知道bootloader是個什麼東東才行。簡單的說,bootloader就是乙個引導核心啟動的一段小 也就是說當啟動完核心之後,它的使命就已經結束。bootloader生命週期 初始化硬體 設定啟動...