@startuml state-sample
'!includeurl https://raw.githubusercontent.com/xuanye/plantuml-style-c4/master/core.puml
!includeurl https://gitee.com/billy163/plantuml-style-c4/raw/master/core.puml
' uncomment the following line and comment the first to use locally
'!include core.puml


'GREEN_ARROW

title AQS class
set namespaceSeparator none

skinparam handwritten true
skinparam defaultFontSize 20
skinparam classFontSize 20
skinparam noteFontSize 20
skinparam fieldFontSize 20
skinparam defaultFontName Aapex
skinparam classFontName Aapex

class AbstractQueuedSynchronizer {
    - volatile int state
    + void acquire(int arg)
    + boolean release(int arg)
    + void acquireShared(int arg)
    + boolean releaseShared(int arg)
}
interface Lock
AbstractQueuedSynchronizer -u-|> AbstractOwnableSynchronizer
Semaphore.Sync -u-|> AbstractQueuedSynchronizer
Semaphore --* Semaphore.Sync

ReentrantLock.Sync -u-|> AbstractQueuedSynchronizer
ReentrantLock --* ReentrantLock.Sync
ReentrantLock .u.|> Lock

@enduml

