码迷,mamicode.com
首页 > 其他好文 > 详细

并发编程(4)--显示锁和AQS

时间:2020-02-01 14:48:15      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:方式   gate   bsp   非公平锁   关键字   数据   mil   打包   color   

4、显式锁和AQS  

显式锁

Lock接口和核心方法

 

package com.xiangxue.ch4;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @author Administrator
 *
 *使用显示锁的范式:一定要在finally中释放锁
 */
public class LockDemo {
    
    private Lock lock  = new ReentrantLock();
    private int count;
    
    public void increament() {
        lock.lock();
        try {
            count++;
        }finally {
            lock.unlock();
        }
    }
    
    public synchronized void incr2() {//可重入
        count++;
        incr2();
    }
    
    public synchronized void test3() {//可重入
        incr2();
    }

}

 

1.Lock接口和synchronized的比较

synchronized 代码简洁,Lock:获取锁可以被中断,超时获取锁,尝试获取锁,读多写少用读写锁

2.可重入锁ReentrantLock、所谓锁的公平和非公平

如果在时间上,先对锁进行获取的请求,一定先被满足,这个锁就是公平的,不满足,就是非公平的

非公平的效率一般来讲更高

 

private Lock lock  = new ReentrantLock();
构造方法可以指定公平锁还是非公平锁,默认非公平。

 

3.ReadWriteLock接口和读写锁ReentrantReadWriteLock

ReentrantLockSyn关键字,都是排他锁,同一时刻,只允许同一个线程访问。

读写锁:同一时刻允许多个读线程同时访问,但是写线程访问的时候,所有的读和写都被阻塞,最适宜于读多写少的情况

4.Condition接口

 

5.用LockCondition实现等待通知

 

了解LockSupport工具

 

park开头的方法

负责阻塞线程

unpark(Thread thread)方法

负责唤醒线程

AbstractQueuedSynchronizer深入分析

什么是AQS?学习它的必要性

AQS使用方式和其中的设计模式

继承模板方法设计模式

了解其中的方法

模板方法:

独占式获取

accquire

acquireInterruptibly

tryAcquireNanos

共享式获取

acquireShared

acquireSharedInterruptibly

tryAcquireSharedNanos

独占式释放锁

release

共享式释放锁

releaseShared

需要子类覆盖的流程方法

独占式获取  tryAcquire

独占式释放  tryRelease

共享式获取 tryAcquireShared

共享式释放  tryReleaseShared

这个同步器是否处于独占模式  isHeldExclusively

 

同步状态state

getState:获取当前的同步状态

setState设置当前同步状态

compareAndSetState 使用CAS设置状态,保证状态设置的原子性

AQS中的数据结构-节点和同步队列

竞争失败的线程会打包成Node放到同步队列,Node可能的状态里:

CANCELLED线程等待超时或者被中断了,需要从队列中移走

SIGNAL后续的节点等待状态,当前节点,通知后面的节点去运行

CONDITION :当前节点处于等待队列

PROPAGATE共享表示状态要往后面的节点传播

0, 表示初始状态

 

节点在同步队列中的增加和移出

 

独占式同步状态获取与释放

 

其他同步状态获取与释放

 

Condition分析

 

 

并发编程(4)--显示锁和AQS

标签:方式   gate   bsp   非公平锁   关键字   数据   mil   打包   color   

原文地址:https://www.cnblogs.com/zqLoveSym/p/12248144.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!