博客
关于我
ReentranLock源码分析
阅读量:265 次
发布时间:2019-03-01

本文共 2070 字,大约阅读时间需要 6 分钟。

ReentrantLock ?????????

ReentrantLock ? Java ?????????????????????????????????????????????????????????? AbstractQueuedSynchronizer (AQS) ?????CAS??????????????????

1. ??

ReentrantLock ??? Lock ?????? lock() ? unlock() ?????? newCondition() ????????????????????????????????????????????

2. ????

ReentrantLock ????????Sync?NonfairSync ? FairSync????NonfairSync ? FairSync ??? Sync?Sync ???? AbstractQueuedSynchronizer?

2.1 Sync ?

Sync ?? ReentrantLock ???????????????????????? nonfairTryAcquire()?tryRelease() ??

nonfairTryAcquire()

  • ????????????????
  • ????????state == 0????? CAS ??????
  • ????????????????????
  • ????????? false?

tryRelease()

  • ????????????????
  • ????????????? IllegalMonitorStateException?
  • ???????????????????
  • ???????????????

2.2 NonfairSync ?

NonfairSync ????????????????????? lock() ???? CAS ???????????????????????

acquire()

  • ??? nonfairTryAcquire() ????
  • ???????????????

addWaiter()

  • ???????????????
  • ?? CAS ???????????

acquireQueued()

  • ??????????????
  • ?????????? SIGNAL???????
  • ??????????????????

2.3 FairSync ?

FairSync ?????????? lock() ???? acquire(1) ????????????????????????????????????????????????

3. ????

3.1 ?????

public class TestReentrantLock {    private static Lock lock = new ReentrantLock();    public static void main(String[] args) {        MyThread t1 = new MyThread("t1", lock);        MyThread t2 = new MyThread("t2", lock);        MyThread t3 = new MyThread("t3", lock);        t1.start();        t2.start();        t3.start();    }    static class MyThread extends Thread {        private Lock lock;        MyThread(String name, Lock lock) {            super(name);            this.lock = lock;        }        public void run() {            lock.lock();            try {                System.out.println(Thread.currentThread().getName() + " running");                Thread.sleep(500);            } catch (InterruptedException e) {                e.printStackTrace();            } finally {                lock.unlock();            }        }    }}

3.2 ????

????????????????????????????????????

?????????????? ReentrantLock ?????????????????????

转载地址:http://qbtx.baihongyu.com/

你可能感兴趣的文章
Objective-C实现simulated annealing模拟退火算法(附完整源码)
查看>>
Objective-C实现SinglyLinkedList单链表算法(附完整源码)
查看>>
Objective-C实现SizeBalancedTree大小平衡树(附完整源码)
查看>>
Objective-C实现skew heap倾斜堆算法(附完整源码)
查看>>
Objective-C实现Skip List跳表算法(附完整源码)
查看>>
Objective-C实现slack message松弛消息算法(附完整源码)
查看>>
Objective-C实现SlopeOne算法(附完整源码)
查看>>
Objective-C实现slow sort慢排序算法(附完整源码)
查看>>
Objective-C实现tanh函数功能(附完整源码)
查看>>
Objective-C实现Tenengrad梯度函数(附完整源码)
查看>>
Objective-C实现Timsort算法(附完整源码)
查看>>
Objective-C实现z-algorithm算法(附完整源码)
查看>>
Objective-C实现Zeller 的同余算法 (附完整源码)
查看>>
Objective-C实现zellers congruence泽勒一致算法(附完整源码)
查看>>
Objective-C实现Zero One Knapsack零一背包计算算法(附完整源码)
查看>>
Objective-C实现一个Pangram字符串至少包含一次所有字母算法(附完整源码)
查看>>
Objective-C实现一个stack算法(附完整源码)
查看>>
Objective-C实现一个通用的堆算法(附完整源码)
查看>>
Objective-C实现一分钟倒计时(附完整源码)
查看>>
Objective-C实现三次样条曲线(附完整源码)
查看>>