java ReentrantLock 公平锁 非公平锁 测试
1 package reentrantlock; 2 3 import java.util.ArrayList; 4 import java.util.concurrent.locks.ReentrantLock; 5 6 public class TestFairSyn { 7 8 public static void main(String[] args) { 9 ArrayList<Thread> arrayList = new ArrayList<>(); 10 Resrc resrc = new Resrc(); 11 12 for (int i = 0; i < 15; i++){ 13 arrayList.add(new Thread(resrc)); 14 } 15 for (int i = 0; i < 15; i++){ 16 arrayList.get(i).start(); 17 } 18 } 19 20 static class Resrc implements Runnable{ 21 private static boolean isTestFair = true; 22 ReentrantLock reentrantLock = new ReentrantLock(isTestFair); 23 24 @Override 25 public void run() { 26 System.out.println(Thread.currentThread().getId()+" 尝试获得锁"); 27 reentrantLock.lock(); 28 if (false){ 29 System.out.println("\t\t" + Thread.currentThread().getId() + " 成功获得锁-解锁"); 30 reentrantLock.unlock(); 31 } 32 else { 33 try { 34 System.out.println("\t\t" + Thread.currentThread().getId() + " 成功获得锁"); 35 // 如果测试 公平锁,把睡眠时间取消,能够大大增加线程的抢占现象 36 Thread.sleep(0, 100); 37 } catch (InterruptedException e) { 38 e.printStackTrace(); 39 } finally { 40 System.out.println("\t\t" + "\t\t" + Thread.currentThread().getId() + " 解锁"); 41 reentrantLock.unlock(); 42 } 43 } 44 } 45 } 46 47 }