线程-AQS-注意的细节点

1.等待通知模式下,一般我们使用notifyAll,因为在通知的时候我们不确定,通知的这个就是我们想要的,所以一般使用notifyAll。

2.独占式获取锁和共享式获取锁,独占式在获取锁的时候,只唤醒后面的一个节点(线程)。共享式获取锁的时候会传播的形式,唤醒后面所有的节点。

Condition,其实也是一个队列。等待队列。
在调用await的时候,把同步器的首节点,放到等待队列的尾部。
在调用signal的时候,会把等待队列中的首节点拿出来,放到同步器的尾部。

注意点,是使用signal还是使用signalAll呢?一般使用signalAll。每个Condition是不同的,是独立的,我只需要唤醒自己的。每次唤醒,只会唤醒只会把第一个拿出来放到同步器的尾部。没有必要通知所有。

线程-AQS-注意的细节点

可重入锁
当前线程获取锁之后,自己还能在获取锁。state状态的累加。

公平与非公平锁:
非公平锁直接先执行一次,公平锁会先判断当前有没有队列,有的话放到尾部。

读写锁ReentrantReadWriteLock锁:
读锁,写锁公用一个同步器,sync。
那怎么去更改一个state呢。这个是int类型的,高位是读,低位是写。
那么读又是可重入的,多个线程又是怎么控制的呢?
这里面使用的就是ThreadLocal,每个线程都有一个独立。在它里面去统计各自的重入次数。

相关文章:

  • 2021-07-19
  • 2022-12-23
  • 2021-08-12
  • 2022-01-07
  • 2022-12-23
  • 2022-12-23
  • 2021-05-21
  • 2021-11-11
猜你喜欢
  • 2022-02-26
  • 2022-01-06
  • 2021-09-08
  • 2022-12-23
  • 2022-12-23
  • 2021-12-30
相关资源
相似解决方案