|
Play Framework/Scala example source code file (Execution.scala)
The Execution.scala Play Framework example source code/* * Copyright (C) 2009-2013 Typesafe Inc. <http://www.typesafe.com> */ package play.api.libs.iteratee import java.util.{ ArrayDeque, Deque } import scala.annotation.tailrec import scala.concurrent.ExecutionContext /** * Contains the default ExecutionContext used by Iteratees. */ object Execution { def defaultExecutionContext: ExecutionContext = Implicits.defaultExecutionContext object Implicits { implicit def defaultExecutionContext: ExecutionContext = Execution.trampoline implicit def trampoline: ExecutionContext = Execution.trampoline } /** * Executes in the current thread. Uses a thread local trampoline to make sure the stack * doesn't overflow. Since this ExecutionContext executes on the current thread, it should * only be used to run small bits of fast-running code. We use it here to run the internal * iteratee code. * * Blocking should be strictly avoided as it could hog the current thread. * Also, since we're running on a single thread, blocking code risks deadlock. */ object trampoline extends ExecutionContext { private val local = new ThreadLocal[Deque[Runnable]] def execute(runnable: Runnable): Unit = { @volatile var queue = local.get() if (queue == null) { // Since there is no local queue, we need to install one and // start our trampolining loop. try { queue = new ArrayDeque(4) queue.addLast(runnable) local.set(queue) while (!queue.isEmpty) { val runnable = queue.removeFirst() runnable.run() } } finally { // We've emptied the queue, so tidy up. local.set(null) } } else { // There's already a local queue that is being executed. // Just stick our runnable on the end of that queue. queue.addLast(runnable) } } def reportFailure(t: Throwable): Unit = t.printStackTrace() } } Other Play Framework source code examplesHere is a short list of links related to this Play Framework Execution.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.