我正在使用Scala,它提供了自己的“执行上下文”抽象(与Java的Executor
大致相同)。我想与另一个需要ExecutorService
的Java库进行交互。是否可以围绕ExecutorService
构建Executor
包装?
我理解ExecutorService
是Executor
的子类。但在我的情况下,我只有后者,需要从中构建前者。
如果构造的ExecutorService
不提供关闭/等待功能,那对我来说没问题。考虑到submit
的实现,我真正关心的是execute
的合理实现。
答案 0 :(得分:3)
import scala.concurrent.{ExecutionContext, ExecutionContextExecutorService}
import java.util.concurrent.{ AbstractExecutorService, TimeUnit }
import java.util.Collections
object ExecutionContextExecutorServiceBridge {
def apply(ec: ExecutionContext): ExecutionContextExecutorService = ec match {
case null => throw null
case eces: ExecutionContextExecutorService => eces
case other => new AbstractExecutorService with ExecutionContextExecutorService {
override def prepare(): ExecutionContext = other
override def isShutdown = false
override def isTerminated = false
override def shutdown() = ()
override def shutdownNow() = Collections.emptyList[Runnable]
override def execute(runnable: Runnable): Unit = other execute runnable
override def reportFailure(t: Throwable): Unit = other reportFailure t
override def awaitTermination(length: Long,unit: TimeUnit): Boolean = false
}
}
或尝试Wrapping a scala.concurrent.ExecutionContext into java.concurrent.ExecutorService