ReentrantLock
- lock()/unlock() 获得锁,释放锁
- tryLock()判断是否可得到锁,返回true/false
- 底层是CAS
- lockInterruptibly()可以被打断,对interrupt()做出响应
- new ReentranLock(true)创建公平锁,检查是否有等待,有则进入等待队列
- 可以通过condition绑定多个条件
CountDownLatch
- latch.countDown(); 完成线程减一
- latch.await();阻塞线程
- 用于等待线程结束 == t.join()
CycliBarrier(栅栏)
- 所有线程都完成后共同执行(满人,发车)
- CyclicBarrier barrier = new CycliBarrier(20);--不执行任何操作
- CyclicBarrier barrier = new CycliBarrier(20,需要执行的操作);
- 需要在每个线程中调用await() 方法
Phaser
- 自定义逻辑-- 继承Phaser,重新onAdvance 方法
- 调用方法:
- onAdvance() 方法,在栅栏被拖到之后调用
- phaser.bulkRegister(2);--定义线程数量(栅栏拦截量)
- phaser.arriveAndAwaitAdvance() --所有人到达并进入下一个阶段
- phaser.register() 注册线程
- phaser.arriveAndDeregister() -- 注销线程,即减线程
ReadWriteLock - StamperdLock
- 读锁 --- 共享锁
- 写锁 --- 排他锁 互斥锁
Semaphore
- Semaphore s = new Semaphore(1);
- s.acquire(); 阻塞,获得锁 获得许可
- s.release() 释放
- 主要用于限流,最多允许几个线程同时运行 限流 信号灯
- 可以创建公平锁
Exchanger
- 交换器
- ex.echanger() 是一个阻塞方法,直至有线程交换,两个线程交换值
- 做互相之间的交易
- 事务的一种
LockSupport
- 当前线程阻塞
- park() -- 阻塞
- unpark() --解除阻塞
- unpark()可以先于park()执行,notify()不可先于wait()执行