充分利用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方法爭搶鎖的示例代碼了。