公平锁:线程获取锁的顺序是按照线程加锁的顺序来分配的,即先进先出。
非公平锁:线程获取锁的顺序是随机的,听天由命。
怎样构建公平锁与非公平锁?
类ReentrantLock有两个构造方法,其中一个是传递一个boolean类型的参数,标识创建一个具有给定公平策略的ReentrantLock,即:

1. 创建公平锁或非公平锁
public class TestPolicyLock {
private ReentrantLock reentrantLock;
public TestPolicyLock(boolean lock){
super();
reentrantLock = new ReentrantLock(lock);
}
public void printMsg(){
try{
reentrantLock.lock();
System.out.println("Thread---" + Thread.currentThread().getName() + "---Get Lock");
} finally {
reentrantLock.unlock();
}
}
}public class TestPolicyLockThread extends Thread {
private TestPolicyLock testPolicyLock;
public TestPolicyLockThread(TestPolicyLock testPolicyLock){
super();
this.testPolicyLock = testPolicyLock;
}
@Override
public void run(){
System.out.println("Thread---" + Thread.currentThread().getName() + "---Begin");
testPolicyLock.printMsg();
}
}public class TestPolicyLockMain {
public static void main(String[] args){
TestPolicyLock testPolicyLock = new TestPolicyLock(true);
// TestPolicyLock testPolicyLock = new TestPolicyLock(false);
for(int i = 0; i < 10; i++){
Thread thread = new TestPolicyLockThread(testPolicyLock);
thread.setName(String.valueOf(i));
thread.start();
}
}
}测试结果,公平锁

非公平锁

本文介绍了如何使用ReentrantLock类构建公平锁与非公平锁,并通过示例代码展示了这两种锁的不同行为。公平锁保证线程按请求顺序获得锁,而非公平锁则不保证顺序。
1910

被折叠的 条评论
为什么被折叠?



