概念
并行和并发
- 并行(parallel):同一时间动手做(doing)多件事的能力。
- 并发(concurrent):同一时间应对(dealing with)多件事的能力。
操作系统中线程状态
JAVA中的线程状态
AQS
AbstractQueuedSynchronizerAQS相关知识
以下代码摘抄自AbstractQueuedSynchronizer类
第一部分
private transient volatile Node head;
private transient volatile Node tail;
// 用于判定共享资源是否正在被占用
private volatile int state;
Q&A
- state为何不使用boolean类型,占用空间小,且能表示二异性?
获取锁的方式有两种:
- 独占式:一旦被占用,其他线程不能占用。
- 共享式:一旦被占用,其他共享模式的线程可以占用。
而处于共享模式时,int类型的state还可以用来表示正在使用共享资源的线程数量。
- head 和 tail 的作用?
当线程没有抢占到锁时,会进行排队。而这个排队的结构是一个FIFO(先进先出)的双向链表,head用于表示队列首位,tail表示末尾。
第二部分-Node结构
static final class Node {
static final int CANCELLED = 1;
static final int SIGNAL = -1;
static final int CONDITION = -2;
static final int PROPAGATE = -3;
volatile int waitStatus; // 等待状态
volatile Node prev; // 前指针
volatile Node next; // 后指针
volatile Thread thread; // 线程对象
Node nextWaiter;
}