CountDownLatch

计数器锁

同步辅助类,允许一个或多个线程等待,直到一系列操作在其它线程中执行成功。线程调用 await 方法进行 block, 线程调用 countDown 方法减少计数器,直到 state = 0,所有wait的线程都醒来了。这个类实现的计数器是 one-shot phenomenon 的,计数器不能够被重置。

阅读全文

CyclicBarrier

CyclicBarrier

同步辅助类,允许一组线程互相等待,直到 reach a common on barrier point. barrier point 是 parties 减少到0的时候。CyclicBarrier 在涉及到固定的 party 线程等待成功之后执行一个动作(barrierCommand)的场景。当等待条件满足之后,这个 Barrier 会被重置,所以这个 Barrier 可以循环使用,所以会有 Cyclic(循环)修饰。

阅读全文

ReentrantReadWriteLock

内部结构

1
2
3
4
5
6
7
8
9
10
11
12
13
public ReentrantReadWriteLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
readerLock = new ReadLock(this);
writerLock = new WriteLock(this);
}

protected ReadLock(ReentrantReadWriteLock lock) {
sync = lock.sync;
}

protected WriteLock(ReentrantReadWriteLock lock) {
sync = lock.sync;
}

阅读全文

Semaphore

锁状态的初始化

1
2
3
4
5
6
7
8
9
10
11
public Semaphore(int permits) {
sync = new NonfairSync(permits);
}

NonfairSync(int permits) {
super(permits);
}

Sync(int permits) {
setState(permits);
}

阅读全文

接口和抽象类

接口是一组操作的集合,通常接口中定义的操作是密切相关的,也是职责单一的,这是接口设计的规范要求。所以在一个系统中可能抽象出许多接口,这些接口彼此之间几乎没有交集(各个接口职责单一)。

但是对于一个系统而言,往往是由许多组件(接口的具体实现类)构成的,如果构成系统的组件没有交集,则这个系统的功能也就非常单一了。

阅读全文

J.U.C(3)-AQS实现

AbstractQueuedSynchronizer是实现锁的关键,Doug Lea关于实现这个类的论文: The java.util.concurrent Synchronizer Framework

阅读全文

J.U.C(2)-锁

Lock

JDK5 中的锁接口: java.util.concurrent.locks.Lock

文档翻译:

Lock提供了对 synchronized 锁机制的扩展。允许更加灵活的组织代码,

阅读全文

J.U.C(1)-原子变量

Atomic操作

A small toolkit of classes that support lock-free thread-safe programming on single variables.

阅读全文

Collections

概述

Collections类是一个工具类,提供了大量关于 Collection 的操作。算法,包装类等等。

synchronized系方法

这种类型的方法,返回不同类型的Collection的包装类,内部使用 synchronized 进行完成的同步。

阅读全文

接口继承

override 和 implement

在类和接口的继承关系中,override 一个方法 表示子类 实现 父类的 那个非 abstract 的方法。

阅读全文