java ReentrantLock 公平锁 非公平锁 测试

Posted cnblogs_z_s

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("		" + Thread.currentThread().getId() + " 成功获得锁-解锁");
30                 reentrantLock.unlock();
31             }
32             else {
33                 try {
34                     System.out.println("		" + Thread.currentThread().getId() + " 成功获得锁");
35                     // 如果测试 公平锁,把睡眠时间取消,能够大大增加线程的抢占现象
36                     Thread.sleep(0, 100);
37                 } catch (InterruptedException e) {
38                     e.printStackTrace();
39                 } finally {
40                     System.out.println("		" + "		" + Thread.currentThread().getId() + " 解锁");
41                     reentrantLock.unlock();
42                 }
43             }
44         }
45     }
46 
47 }

 

以上是关于java ReentrantLock 公平锁 非公平锁 测试的主要内容,如果未能解决你的问题,请参考以下文章

java ReentrantLock 公平锁 非公平锁 测试

java多线程20 : ReentrantLock中的方法 ,公平锁和非公平锁

Java多线程和并发,ReentrantLock(公平锁)

java中ReentrantLock实现,公平锁和非公平锁,AQS并发队列,

Java多线程12:ReentrantLock中的方法

Java锁之重入锁(Reentrantlock)原理,公平锁与非公平锁