java队列同步器,独占式同步状态获取与释放与共享式同步状态获取与释放比较
《java并发编程的艺术》这本书中说同步器依赖于同步队列,即就是在同步器中维持着一个双向链表的同步队列
独占式同步状态获取与释放,表示同一时刻只能有一个线程成功获取同步状态,在同步队列中只有节点的前驱是头结点,才能尝试获取同步状态。这就保证了每一次只有队列的第一个节点才有资格获取同步状态,保证的多个线程之间的互斥,独占性
但是在共享式同步状态获取与释放中,共享的意思是同时允许多个线程获取同步状态,但是书中说,(如果当前节点的前驱为头结点时,尝试获取同步状态,如果返回值大于等于0,表示该次获取同步状态成功并且从自旋过程中退出);此时同样是串行的怎么实现同时获取的呢?
我的理解是当一个线程获取了同步状态以后,就从同步队列中移除,此时线程还没有执行完也没有释放同步状态,此时由于线程从同步队列中移除了,下一个线程就可以获取同步状态了,虽然上一个线程还没有释放同步状态。而对于独占式来说,必须要等到上一个线程释放同步状态后,下一个线程才能获取。
是这样的吗???????????