Java 多執行緒之Lock的用法

2021-08-19 16:13:35 字數 1084 閱讀 4945

lock 為執行緒加鎖解鎖,因為多個執行緒在訪問同乙個資源時,乙個資源不能同時給兩個執行緒進行讀寫操作. 所以使用執行緒同步的方式來對資源進行訪問限制.

下面來看lock的用法(使用流程):

1. 建立reentrantlock物件, 首先,這個reentrantlock類(重入鎖),是一種遞迴無阻塞的同步機制的乙個類.

建立方式如下:

lock lock = new reentrantlock();

2. 通過物件來獲取condition物件;  condition是乙個多執行緒協調通訊的工具類,使得某個或者某些執行緒一起等待某個條件,只有當該條件具備時(signal 或者signalall方法被呼叫時), 這些執行緒才會被喚醒,從而重新爭奪鎖.

condition的作用是用來喚醒和等待.

condition b = lock.newcondition();

condition a = lock.newcondition();

3. 提供執行緒類,在重寫的run方法中按照如下流程來執行:

3.1 lock物件.lock 上鎖

3.2 執行該執行緒要做的內容

3.3 condition物件.signal()

3.4 condition物件.await()

3.5 lock物件.unlock 解鎖

下面來看乙個例程: 該例程的主要目的是列印abababababab.....

public test

class t1 implements runnablecatch(interruptedexception e)

lock.unlock(); //解鎖

}} }

class t2 implements runnablecatch(interruptedexception e)

lock.unlock(); //解鎖

}} }

}

需要注意的一點是:

signal和await一定是不同的物件來呼叫. 一般使用的有兩套: object.notify()---object.wait() 和condition.signal()---condition.await().

Java多執行緒 Lock

reentrantlock可以和synchronized達到一樣的效果,並且擴充套件功能上也更加強大,而且使用更加靈活。lock lock new reentrantlock 加鎖 lock.lock 取消鎖 lock.unlock 等待通知模式 synchronized與wait 和notify方...

C 多執行緒中 lock用法

本文介紹c lockkeyword,c 提供了乙個keywordlock,它能夠把一段 定義為相互排斥段 critical section 相互排斥段在乙個時刻內僅僅同意乙個執行緒進入執行,而其他執行緒必須等待。每個執行緒都有自己的資源,可是 區是共享的,即每個執行緒都能夠執行相同的函式。這可能帶來...

boost多執行緒之mutex與lock

mutex類主要有兩種 獨佔式與共享式的互斥量。獨佔式互斥量 mutex 獨佔式的互斥量,是最簡單最常用的一種互斥量型別 try mutex 它是mutex的同義詞,為了與相容以前的版本而提供 timed mutex 它也是獨佔式的互斥量,但提供超時鎖定功能 遞迴式互斥量 recursive mut...