博客
关于我
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/

你可能感兴趣的文章
Redis入门
查看>>
PHP 截取字符串乱码的解决方案
查看>>
php 接口类与抽象类的实际作用
查看>>
PHP 插入排序 -- 折半查找
查看>>
PHP 支持8种基本的数据类型
查看>>
php 放大镜,放大镜放大图片效果
查看>>
PHP 数据库连接池实现
查看>>
php 数组 区别,PHP中数组的区别
查看>>
PHP 数组怎么添加一个元素
查看>>
PHP 文件操作
查看>>
php 文字弹幕效果代码,HTML5文字弹幕效果
查看>>
php 标准规范
查看>>
PHP 浮点型精度运算相关问题
查看>>
php 浮点型计算精度问题
查看>>
php 特定时间段统计,jpgraph某个时间段的数据统计
查看>>
php 生成csv mac下乱码
查看>>
php 生成证书 签名及验签
查看>>
PHP 的标准输入与输出
查看>>
php 笔记 (早前的,很乱)
查看>>
PHP 第一天
查看>>