标签:线程池 默认 container 阻塞队列 OLE park 限流 perm 一个
state
AQS 的关键
CAS
Compare And Swap 修改 state
Unsafe
使用 LockSupport 的 park()、unpark() 挂起和唤醒线程
同步队列
sync queue
条件队列
condition queue
等待队列
还有什么阻塞队列,看看哪个是真的
ReadWriteReentrantLock
StampLock
参考 分布式锁
闭锁,允许N个线程一直等待,直到其他线程执行的操作全部完成。
CountDownLatch(int count)
count 表示计数器。
数据库脱敏,每批次查询 1000 条,提交给线程池,线程在脱敏完成后 countDown,然后继续。
主线程 await 阻塞,等待脱敏完 1000 条记录后返回,并批量更新数据库。
setCount()
EXISTS key,如果不存在则 SET count
countDown()
DECR key,如果返回值 <= 0,则 DEL key
await()
在 while 循环中 GET key,如果返回值 == 0,则结束循环
栅栏,让一组线程互相等待,直到所有线程都到达一个同步点。Cylic 表示可以循环利用。
CyclicBarrier(int parties, Runnable barrierAction)
parties 表示预期到达栅栏的线程数;barrierAction 表示所有线程到达栅栏后执行的回调
数据库脱敏,每批次查询 1000 条,提交给线程池,线程在脱敏完成后 await。
当 1000 个线程 await 时,CylicBarrier 唤醒其中一个线程执行批量更新。
信号量,控制资源可被同时访问的线程个数。
Semaphore(int permits, boolean fair)
permits 表示许可个数;fair 表示公平竞争,默认 false。
限流。
setPermits()
GET key,如果返回值 == 0,则 SET key
acquire()
GET key,如果返回值 > 0,则 INCRBY permits
release()
INCRBY permits
标签:线程池 默认 container 阻塞队列 OLE park 限流 perm 一个
原文地址:https://www.cnblogs.com/mougg/p/13917977.html