65 lines
1.6 KiB
Plaintext
65 lines
1.6 KiB
Plaintext
@startuml
|
|
package com.iluwatar.reader.writer.lock {
|
|
class App {
|
|
- LOGGER : Logger {static}
|
|
+ App()
|
|
+ main(args : String[]) {static}
|
|
}
|
|
class Reader {
|
|
- LOGGER : Logger {static}
|
|
- name : String
|
|
- readLock : Lock
|
|
- readingTime : long
|
|
+ Reader(name : String, readLock : Lock)
|
|
+ Reader(name : String, readLock : Lock, readingTime : long)
|
|
+ read()
|
|
+ run()
|
|
}
|
|
class ReaderWriterLock {
|
|
- LOGGER : Logger {static}
|
|
- currentReaderCount : int
|
|
- globalMutex : Set<Object>
|
|
- readerLock : ReadLock
|
|
- readerMutex : Object
|
|
- writerLock : WriteLock
|
|
+ ReaderWriterLock()
|
|
- doesWriterOwnThisLock() : boolean
|
|
- isLockFree() : boolean
|
|
+ readLock() : Lock
|
|
+ writeLock() : Lock
|
|
}
|
|
-class ReadLock {
|
|
- ReadLock()
|
|
- acquireForReaders()
|
|
+ lock()
|
|
+ lockInterruptibly()
|
|
+ newCondition() : Condition
|
|
+ tryLock() : boolean
|
|
+ tryLock(time : long, unit : TimeUnit) : boolean
|
|
+ unlock()
|
|
}
|
|
-class WriteLock {
|
|
- WriteLock()
|
|
+ lock()
|
|
+ lockInterruptibly()
|
|
+ newCondition() : Condition
|
|
+ tryLock() : boolean
|
|
+ tryLock(time : long, unit : TimeUnit) : boolean
|
|
+ unlock()
|
|
}
|
|
class Writer {
|
|
- LOGGER : Logger {static}
|
|
- name : String
|
|
- writeLock : Lock
|
|
- writingTime : long
|
|
+ Writer(name : String, writeLock : Lock)
|
|
+ Writer(name : String, writeLock : Lock, writingTime : long)
|
|
+ run()
|
|
+ write()
|
|
}
|
|
}
|
|
ReaderWriterLock --> "-readerLock" ReadLock
|
|
ReadLock --+ ReaderWriterLock
|
|
WriteLock --+ ReaderWriterLock
|
|
ReaderWriterLock --> "-writerLock" WriteLock
|
|
@enduml |