線程同步和通信synchronized和lock
1. synchronized
被synchronized修飾的對象叫做同步監視器,多個線程進入被synchronized修飾的方法或代碼塊時,需要獲得對同步監視器的鎖定,同一時刻只有一個線程能夠獲得對同步監視器的鎖定,據此實現線程同步機制。對於synchronized同步監視器的解鎖下面有單獨說明。
1. synchronized 用法
1. 修飾方法
public synchronized void test(){
....
}
此時默認this作爲同步監視器
2. 修飾同步代碼塊
synchronized(lock){
}
此時顯示指定lock對象作爲同步監視器
2. 釋放同步監視器的幾種情況
1. 同步方法或同步代碼塊執行完畢
2. 同步方法或同步代碼塊return或break
3. 異常退出
4. wait
3. 線程同步
調用同步監視器的wait,notify和notifyAll方法
2. lock
1. 使用ReentrantLock
ReentrantLock lock = new ReentrantLock();
lock.lock();
try{
...
}finally{
lock.unlock();
}
2. 線程通信,使用lock加鎖解鎖需要使用condition進行控制
ReentrantLock lock = new ReentrantLock();
Condition cond = lock.newCondition();
cond.await()
cond.signal()
cond.signalAll()
以上三個方法與wait、notify和notifyAll比較類似
3. 阻塞隊列BlockingQueue
利用BlockingQueue阻塞隊列的put和take方法的線程阻塞實現線程控制
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.