Skip to content

Instantly share code, notes, and snippets.

@mrbald
Created January 8, 2019 18:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrbald/97d813253e3c56f83714c4457695646e to your computer and use it in GitHub Desktop.
Save mrbald/97d813253e3c56f83714c4457695646e to your computer and use it in GitHub Desktop.
Scala syntax for Java 8 StampedLock
object StampedLockSyntax {
def syncRead[T](lock: StampedLock)(block: => T): T = {
val stamp = lock.readLock()
try {
block
} finally {
lock.unlockRead(stamp)
}
}
def syncOptRead[T](lock: StampedLock)(block: => T): T = {
val stamp = lock.tryOptimisticRead()
block match {
case res: T if lock.validate(stamp) => res
case _ => syncRead(lock)(block)
}
}
def syncWrite[T](lock: StampedLock)(block: => T): T = {
val stamp = lock.writeLock()
try {
block
} finally {
lock.unlockWrite(stamp)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment