您現在的位置是:首頁 > 垂釣
教你使用BooleanLock,多個執行緒透過lock方法爭搶鎖的方法
- 由 程式設計小課堂 發表于 垂釣
- 2022-10-13
zipper lock如何使用
充分利用wait、notify方法的功能,實現一個顯式鎖,可中斷被阻塞的執行緒。在使用該顯式鎖的時候,務必藉助於try finally語句來確保每次獲取到鎖之後都可以正常的釋放,使用BooleanLock,多個執行緒透過lock方法爭搶鎖示例程式碼如下:
package com。wangwenjun。concurrent。chapter05;
import java。util。concurrent。TimeUnit;
import java。util。stream。IntStream;
import static java。lang。Thread。currentThread;
import static java。util。concurrent。ThreadLocalRandom。current
public class BooleanLockTest
{
//定義BooleanLock
private final Lock lock=new BooleanLock();
//使用try。。finally語句塊確保lock每次都能被正確釋放
public void syncMethod()
{
//加鎖
lock。lock();
try
{
int randomInt=current()。nextInt(10);
System。out。printin(currentThread()+“get the 1)
TimeUnit。SECONDS。sleep(randomInt);
}catch(InterruptedException e)
{
e。printStackTrace();
}finally
{
//釋放鎖
1ock。unlock();
}
}
public static void main(String[]args)
{
BooleanLockTest blt=new BooleanLockTest();
//定義一個執行緒並且啟動
IntStream。range(0,10)
。mapToObj(i->new Thread(blt::syncMethod))
。forEach(Thread::start);
}
}
根據以上程式碼輸出可以看到,每次都會確保只有一個執行緒能夠獲得鎖的執行許可權,這一點已經與synchronized同步非常類似。以上就是使用BooleanLock,多個執行緒透過lock方法爭搶鎖的示例程式碼了。