【复习】四大工具类

1.juc:Lock 1.5

​ tryLock() :非阻塞式得获取锁

​ lockInterruptily() : 响应中断

​ tryLock(long time,TimeUnit) :支持超时

2.synchronized与ReentrantLock的区别

(1)synchronized是JVM层面,是关键字;Lock是Java语言层面实现的"管理"

(2)Lock具备一些synchronized不具备的特性,如支持公平锁,支持多个等待队列,还支持读写锁

​ 读写锁:读者写者问题

​ 读线程:读读异步,读写同步

​ 写线程:写写同步

读写锁实现:ReentrantReadWriteLock(实现缓存HashMap + ReentrantReadWriteLock)

读锁:ReadLock,多个线程在同一时刻可以共同获得该读锁

写锁:WriteLock,独占锁,多个线程在同一时刻只有一个线程可以取得该锁

共享锁:多个线程可以同时取得该锁 读锁 ReadLock 共享锁 == 无锁?

当写线程开始工作,所有其他线程(包含读线程)全部进入阻塞态.

JDK1.8 StampedLock 更加乐观的锁实现,性能比ReentrantReadWriteLock还高

juc包下工具类:CAS+Lock

1.闭锁CountDownLatch

public CountDownLatch(int count); //count 表示需要等待的线程个数
public void countDown(); //计数器值-1(类似运动员线程)
public void await() throws InterruptedException //等待线程调用该方法进入阻塞态,直到计数器减为0

CountDownLatch对象在计数器值减为0时不可恢复。只会阻塞调用await方法的线程

2.循环栅栏CyclicBarrier

public CyclicBarrier(int parties); //parties表示需要有多少个线程同时暂停以及恢复执行
public int await();//cyclicBarrier 计数器-1,当减为0时,所有阻塞线程同时恢复执行
public CyclicBarrier(int parties,Runnable barrierAction)//多个线程在恢复执行之前,任意挑选一个线程执行barrierAction任务后,再同时恢复执行

CyclicBarrier计时器值可以恢复,CyclicBarrier的对象可以重复使用。

3.Exchanger交换器

Exchanger用于两个线程交换数据,当缓冲区只有一个线程时,该线程会阻塞直到配对成功再交换数据恢复执行

4.Semaphore信号量

public Semaphore(int permits)//表示许可的数量
public Semaphore(int permits,boolean fair) : //等待时间最长的线程最先获取到许可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值