aboutsummaryrefslogtreecommitdiff
path: root/stage1/KeyLockedLazyCache.scala
diff options
context:
space:
mode:
authorChristopher Vogt <oss.nsp@cvogt.org>2016-03-13 03:18:18 -0400
committerChristopher Vogt <oss.nsp@cvogt.org>2016-03-19 21:13:48 -0400
commitc095f435b68272d4ae0409ab4c9466145609710e (patch)
tree189f0f2755d8fd2e6af3eec9d514c29b3cebdef5 /stage1/KeyLockedLazyCache.scala
parentca7e166e09776410ef39e2808aab6a3fdd1e7911 (diff)
downloadcbt-c095f435b68272d4ae0409ab4c9466145609710e.tar.gz
cbt-c095f435b68272d4ae0409ab4c9466145609710e.tar.bz2
cbt-c095f435b68272d4ae0409ab4c9466145609710e.zip
Refactored ClassLoaderCache to use key locked cache to pave the way for caching classloaders hierarchically without deadlocks
Diffstat (limited to 'stage1/KeyLockedLazyCache.scala')
-rw-r--r--stage1/KeyLockedLazyCache.scala33
1 files changed, 0 insertions, 33 deletions
diff --git a/stage1/KeyLockedLazyCache.scala b/stage1/KeyLockedLazyCache.scala
deleted file mode 100644
index c8b37ea..0000000
--- a/stage1/KeyLockedLazyCache.scala
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-package cbt
-import java.util.concurrent.ConcurrentHashMap
-import scala.concurrent.Future
-
-/**
-A cache that lazily computes values if needed during lookup.
-Locking occurs on the key, so separate keys can be looked up
-simultaneously without a deadlock.
-*/
-final private[cbt] class KeyLockedLazyCache[Key <: AnyRef,Value]{
- private val keys = new ConcurrentHashMap[Key,LockableKey]()
- private val builds = new ConcurrentHashMap[LockableKey,Value]()
-
- private class LockableKey
- def get( key: Key, value: => Value ): Value = {
- val keyObject = keys.synchronized{
- if( ! (keys containsKey key) ){
- keys.put( key, new LockableKey )
- }
- keys get key
- }
- // synchronizing on key only, so asking for a particular key does
- // not block the whole cache, but just that cache entry
- key.synchronized{
- if( ! (builds containsKey keyObject) ){
- builds.put( keyObject, value )
- }
- builds get keyObject
- }
- }
-}
-*/