相关疑难解决方法(0)

scala.concurrent.blocking的用例

我遇到了这个scala.concurrent.blocking方法,根据Scala文档,这是......

用于指定可能阻塞的代码段,允许当前的BlockContext调整运行时的行为.正确标记阻塞代码可以提高性能或避免死锁.

我有些疑惑:

  • 生成新线程的因素是什么?
  • 这是否仅适用于scala.concurrent.ExecutionContext.Implicits.global执行上下文或用户创建的执行上下文?
  • 如果我用blocking {... 包装任何可执行文件会发生什么}
  • 我们应该使用这个结构的任何实际用例.

scala scala-2.10

71
推荐指数
1
解决办法
1万
查看次数

将scala future转换为java future

我有一个生成的java接口,包含一个方法:

public Future<?> getCustomersAsync(AsyncHandler<Customer> asyncHandler);
Run Code Online (Sandbox Code Playgroud)

我想用Akka实现它.我写了以下内容:

override def getCustomerAsync(asyncHandler: AsyncHandler[Customer]): Future[_] = {
  myActorRef.ask(GetCustomer, system.actorOf(Props[Responder]))
}
Run Code Online (Sandbox Code Playgroud)

问题是ask退货scala.concurrent.Future[Any]和方法必须返回java.util.concurrent.Future[?].

Error:(33, 17) type mismatch;
 found   : scala.concurrent.Future[Any]
 required: java.util.concurrent.Future[?]
    myActorRef.ask(GetCustomer, system.actorOf(Props[Responder]))
                  ^
Run Code Online (Sandbox Code Playgroud)

我该怎么做这个转换?

java scala future akka scala-java-interop

13
推荐指数
2
解决办法
4782
查看次数

取消与Scala的未来和承诺

这是我上一个问题的后续内容.

假设我有一个执行可中断阻塞调用的任务.我想将其作为a运行Future并使用方法取消它.failurePromise

我希望取消工作如下:

  • 如果一个人在完成任务之前取消了该任务,我希望任务"立即"完成,如果已经启动了阻止调用,我将Future要调用阻塞调用onFailure.

  • 如果在任务完成取消任务,我希望获得一个状态,说明由于任务已经完成,取消失败.

是否有意义?是否可以在Scala中实现?有这样的实现的例子吗?

scala future promise akka cancellation

12
推荐指数
3
解决办法
5776
查看次数

并行执行竞争计算并丢弃除完成的第一个之外的所有计算

我写了一个基于随机性生成迷宫的函数.大多数时候,这个功能非常快.但每隔一段时间,由于随机数运气不好,需要几秒钟.

我想多次并行启动这个功能,让最快的功能"赢".

Scala标准库(或Java标准库)是否为此作业提供了合适的工具?

java concurrency multithreading scala java.util.concurrent

6
推荐指数
2
解决办法
201
查看次数

如何在Scala中中断异步计算?

我需要运行两个并行计算,并在第二个完成时中断第一个计算.目前,我已使用标准Java线程实现它:

/**
 * Runs <var>sup</var> in parallel with <var>main</var>.
 * Terminate (interrupt) it when <var>main</var> finishes.
 */
def support[R](sup: => Unit, main: => R): R = {
  val supThread = new Thread {
    override def run = { sup };
  }

  supThread.start();
  try {
    main;
  } finally {
    supThread.interrupt();
  }
}
Run Code Online (Sandbox Code Playgroud)

使用Scala的并发库可以实现相同的行为,而不使用Thread显式的s吗?

concurrency scala interrupt-handling

5
推荐指数
1
解决办法
472
查看次数

Scala Future设计问题

我不明白为什么Scala Future比Twitters更难使用并且功能更少,而第一个是在第二个之后创建的.所以,这里有一些问题scala.concurrent.Future:

  • 为什么Future.onComplete返回Unit而不是Future?可组合方法更方便.
  • 为什么Scala Future不支持取消?

scala

3
推荐指数
1
解决办法
116
查看次数