1. 程式人生 > >多線程的一點點整理

多線程的一點點整理

con notify 使用 等待 unlock await 一點 lock on()

1.synchronized

synchronized:實現線程同步,同步可以是某一方法或某一個代碼塊,獲取對象鎖,其他線程阻塞。

使用wait()釋放對象鎖,線程進入等待狀態,wait()後面的代碼將等待線程再次被喚醒時執行。

使用notify()隨機喚醒一個處於wait()方法的線程,重新獲取對象鎖,使用notifyAll()喚醒所有處於wait()的線程,只不過多個處於wait()方法線程會競爭對象鎖,誰拿到鎖誰執行,具有不確定性。

2.Lock

 ReentrantLock lock = new ReentrantLock();//得到鎖對象

 lock.lock();//獲取對象鎖,使得線程後面代碼同步,其他線程阻塞

 lock.unlock();//釋放鎖

Condition condition = lock.newCondition();//得到等待對象

condition.await();//線程進入等待狀態,await()後面的代碼將等待線程再次被喚醒時執行。

condition.signal();//喚醒一個處於await()方法的線程,重新獲取對象鎖,這裏只喚醒condition對象執行了await()的線程,不具有隨機性

condition.signalAll();//喚醒所有處於await()的線程

多線程的一點點整理