java ReentrantLock 公平锁 非公平锁 测试

时间:2023-03-08 19:52:20
 package reentrantlock;

 import java.util.ArrayList;
import java.util.concurrent.locks.ReentrantLock; public class TestFairSyn { public static void main(String[] args) {
ArrayList<Thread> arrayList = new ArrayList<>();
Resrc resrc = new Resrc(); for (int i = 0; i < 15; i++){
arrayList.add(new Thread(resrc));
}
for (int i = 0; i < 15; i++){
arrayList.get(i).start();
}
} static class Resrc implements Runnable{
private static boolean isTestFair = true;
ReentrantLock reentrantLock = new ReentrantLock(isTestFair); @Override
public void run() {
System.out.println(Thread.currentThread().getId()+" 尝试获得锁");
reentrantLock.lock();
if (false){
System.out.println("\t\t" + Thread.currentThread().getId() + " 成功获得锁-解锁");
reentrantLock.unlock();
}
else {
try {
System.out.println("\t\t" + Thread.currentThread().getId() + " 成功获得锁");
// 如果测试 公平锁,把睡眠时间取消,能够大大增加线程的抢占现象
Thread.sleep(0, 100);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("\t\t" + "\t\t" + Thread.currentThread().getId() + " 解锁");
reentrantLock.unlock();
}
}
}
} }