
java 并发
skinX
这个作者很懒,什么都没留下…
展开
-
threadlocal
threadlocal是一个线程安全的容器类,在每个线程里都有一张map表,用来存储数据,达到线程安全的效果。set方法 public void set(T value) { 获取当前线程 Thread t = Thread.currentThread(); 获取当前线程中的map ThreadLocalMap map = getMap(t); if (map != null) { 存储对象,key是thre原创 2020-09-11 16:28:07 · 151 阅读 · 0 评论 -
ReentrantLock 浅析
构造函数 默认为非公平模式 public ReentrantLock() { sync = new NonfairSync(); } 传递参数决定是公平还是非公平模式 public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync(); }lock方法 public void lock() {原创 2020-07-23 14:22:16 · 217 阅读 · 0 评论 -
Semaphore浅析
Semaphore 类似于通行证,获取通行证的线程可以执行,未获取的需要等待获取,Semaphore可以用来做资源控制。 构造函数,默认为非公平模式 public Semaphore(int permits) { sync = new NonfairSync(permits); } 构造函数,公平模式 public Semaphore(int permits, boolean fair) { sync = fair ? new FairSync原创 2020-07-17 14:31:04 · 140 阅读 · 0 评论 -
CyclicBarrier浅析
假如说A、B、C、D四个线程需要执行到某一个点,然后一起继续执行,就可以使用CyclicBarrier实现(例如DNF中,所有人都准备好,才能进下一个地图)。 /** The lock for guarding barrier entry */ private final ReentrantLock lock = new ReentrantLock(); /** Condition to wait on until tripped */ 执行await的线程,会阻塞在上面原创 2020-07-17 10:25:55 · 173 阅读 · 1 评论 -
CountDownLatch浅析
假如有4个线程ABCD,其中A、B需要等待C、D执行到某个点后再执行,那么就可以使用CountDownLatch实现。主要方法 初始化方法,会初始化Sync的内部变量state, public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync = new Sync(count); } sta原创 2020-07-05 11:28:45 · 194 阅读 · 0 评论