本文整理汇总了Scala中java.util.concurrent.Semaphore类的典型用法代码示例。如果您正苦于以下问题:Scala Semaphore类的具体用法?Scala Semaphore怎么用?Scala Semaphore使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Semaphore类的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Scala代码示例。
示例1: LimitConcurrentRequestsFilter
//设置package包名称以及导入依赖的类
package mesosphere.marathon.api
import java.util.concurrent.Semaphore
import javax.servlet._
import javax.servlet.http.HttpServletResponse
class LimitConcurrentRequestsFilter(concurrentOption: Option[Int]) extends Filter {
val concurrent = concurrentOption.getOrElse(0)
val semaphore = new Semaphore(concurrent)
val filterFunction = concurrentOption.map(_ => withSemaphore _).getOrElse(pass _)
def withSemaphore(request: ServletRequest, response: ServletResponse, chain: FilterChain): Unit = {
if (semaphore.tryAcquire()) {
try { chain.doFilter(request, response) }
finally { semaphore.release() }
} else {
response match {
case r: HttpServletResponse => r.sendError(503, s"Too many concurrent requests! Allowed: $concurrent.")
case r: ServletResponse => throw new IllegalArgumentException(s"Expected http response but got $response")
}
}
}
def pass(request: ServletRequest, response: ServletResponse, chain: FilterChain): Unit = {
chain.doFilter(request, response)
}
override def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain): Unit = {
filterFunction(request, response, chain)
}
override def init(filterConfig: FilterConfig): Unit = {}
override def destroy(): Unit = {}
}