我需要使用 ThreadPoolTaskSupport 吗?
Do I need to use ThreadPoolTaskSupport?
我在 Scala 2.11 中遇到了一种情况,我需要一个并行集合来使用特定的线程机制。 Scala 代码依赖于一个用 Java 编写的平台,它从 ThreadPoolExecutor
创建一个 ThreadPoolExecutor
to manage threads; the Scala code needs to hook into the same pool it creates. From this doc, I'll need to set up a TaskSupport
in the parallel collection. I can do this by constructing a ThreadPoolTaskSupport
。但是,ThreadPoolTaskSupport
被标记为已弃用(请注意 ThreadPoolExecutor
而不是 在 Java 中被标记为已弃用)。
在这种情况下,我只需要使用已弃用的 Scala class,还是有其他解决方法?
您可以用 ThreadPoolExecutor
来创建 scala.concurrent.ExecutionContext
,因为 ThreadPoolExecutor
是 java.util.concurrent.ExecutorService
并使用 ExecutionContext
来构造 ExecutionContextTaskSupport
:
import scala.collection.parallel. { ExecutionContextTaskSupport, TaskSupport }
import scala.concurrent.ExecutionContext
import java.util.concurrent.ThreadPoolExecutor
def ectsFromTPE(tpe: ThreadPoolExecutor): TaskSupport =
new ExecutionContextTaskSupport(
environment = ExecutionContext.fromExecutorService(tpe)
)
然后您可以像使用任何其他方法一样使用生成的 TaskSupport
:
import scala.collection.parallel.immutable.ParRange
val nn = ParRange(0, Int.MaxValue, 1, true)
nn.taskSupport = ectsFromTPE(???)
我在 Scala 2.11 中遇到了一种情况,我需要一个并行集合来使用特定的线程机制。 Scala 代码依赖于一个用 Java 编写的平台,它从 ThreadPoolExecutor
创建一个 ThreadPoolExecutor
to manage threads; the Scala code needs to hook into the same pool it creates. From this doc, I'll need to set up a TaskSupport
in the parallel collection. I can do this by constructing a ThreadPoolTaskSupport
。但是,ThreadPoolTaskSupport
被标记为已弃用(请注意 ThreadPoolExecutor
而不是 在 Java 中被标记为已弃用)。
在这种情况下,我只需要使用已弃用的 Scala class,还是有其他解决方法?
您可以用 ThreadPoolExecutor
来创建 scala.concurrent.ExecutionContext
,因为 ThreadPoolExecutor
是 java.util.concurrent.ExecutorService
并使用 ExecutionContext
来构造 ExecutionContextTaskSupport
:
import scala.collection.parallel. { ExecutionContextTaskSupport, TaskSupport }
import scala.concurrent.ExecutionContext
import java.util.concurrent.ThreadPoolExecutor
def ectsFromTPE(tpe: ThreadPoolExecutor): TaskSupport =
new ExecutionContextTaskSupport(
environment = ExecutionContext.fromExecutorService(tpe)
)
然后您可以像使用任何其他方法一样使用生成的 TaskSupport
:
import scala.collection.parallel.immutable.ParRange
val nn = ParRange(0, Int.MaxValue, 1, true)
nn.taskSupport = ectsFromTPE(???)