本文整理汇总了Scala中java.util.concurrent.ConcurrentMap类的典型用法代码示例。如果您正苦于以下问题:Scala ConcurrentMap类的具体用法?Scala ConcurrentMap怎么用?Scala ConcurrentMap使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ConcurrentMap类的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Scala代码示例。
示例1: TextDocumentManager
//设置package包名称以及导入依赖的类
package langserver.core
import langserver.messages._
import langserver.types._
import java.util.concurrent.ConcurrentMap
import java.util.concurrent.ConcurrentHashMap
import com.typesafe.scalalogging.LazyLogging
import scala.collection.JavaConverters._
class TextDocumentManager(connection: Connection) extends LazyLogging {
connection.notificationHandlers += {
case DidOpenTextDocumentParams(td) => onOpenTextDocument(td)
case DidChangeTextDocumentParams(td, changes) => onChangeTextDocument(td, changes)
case DidCloseTextDocumentParams(td) => onCloseTextDocument(td)
case e => ()
}
private val docs: ConcurrentMap[String, TextDocument] = new ConcurrentHashMap
def documentForUri(uri: String): Option[TextDocument] =
Option(docs.get(uri))
def allOpenDocuments: Seq[TextDocument] = docs.values.asScala.toSeq
def onOpenTextDocument(td: TextDocumentItem) = {
docs.put(td.uri, new TextDocument(td.uri, td.text.toCharArray))
}
def onChangeTextDocument(td: VersionedTextDocumentIdentifier, changes: Seq[TextDocumentContentChangeEvent]) = {
docs.get(td.uri) match {
case null =>
logger.error(s"Document ${td.uri} not found in this manager. Adding now")
// we assume full text sync
docs.put(td.uri, new TextDocument(td.uri, changes.head.text.toCharArray))
case doc =>
docs.put(td.uri, doc.applyChanges(changes))
}
}
def onCloseTextDocument(td: TextDocumentIdentifier) = {
docs.remove(td.uri)
}
}
示例2: ConcurrentMapCache
//设置package包名称以及导入依赖的类
package com.twitter.cache
import com.twitter.util.{Promise, Future}
import java.util.concurrent.ConcurrentMap
class ConcurrentMapCache[K, V](underlying: ConcurrentMap[K, Future[V]]) extends FutureCache[K, V] {
def get(key: K): Option[Future[V]] = Option(underlying.get(key))
def set(key: K, value: Future[V]): Unit = underlying.put(key, value)
def getOrElseUpdate(key: K)(compute: => Future[V]): Future[V] = {
val p = Promise[V]
underlying.putIfAbsent(key, p) match {
case null =>
p.become(compute)
p
case oldv => oldv
}
}
def evict(key: K, value: Future[V]): Boolean = underlying.remove(key, value)
def size: Int = underlying.size()
}
示例3: list
//设置package包名称以及导入依赖的类
package com.tennik.akkatcp.dao
import java.util.concurrent.{ ConcurrentHashMap, ConcurrentMap }
import com.tennik.akkatcp.models.User
import org.mindrot.jbcrypt.BCrypt
import scala.collection.JavaConverters._
trait UserDao {
def list: Iterable[User]
def find(userName: String): Option[User]
def create(user: User): Option[User]
def update(user: User): Option[User]
def delete(userName: String): Option[User]
}
//in memory storage
class InMemoryUserDAO extends UserDao {
val storage: ConcurrentMap[String, User] = new ConcurrentHashMap[String, User]()
import InMemoryUserDAO._
def init() {
storage.put("admin", User("admin", pwd("password")))
storage.put("user1", User("user", pwd("password1")))
storage.put("user2", User("user", pwd("password2")))
}
init()
def list: Iterable[User] = storage.values().asScala
def find(userName: String): Option[User] = Option(storage.get(userName))
def create(user: User): Option[User] = Option(storage.put(user.userName, User(user.userName, pwd(user.password))))
def update(user: User): Option[User] = {
val oldUser = storage.get(user.userName)
storage.put(user.userName, User(user.userName, pwd(user.password)))
Option(oldUser)
}
def delete(userName: String): Option[User] = {
val oldUser = storage.get(userName)
storage.remove(userName, oldUser)
Option(oldUser)
}
}
object InMemoryUserDAO {
def pwd(p: String): String = BCrypt.hashpw(p, BCrypt.gensalt())
}