小编Luo*_*inh的帖子

在Future完成之前退出应用程序

据我了解,Future将由线程池中的新线程处理。同时,主线程可以继续执行不依赖于Future结果的计算。

这来自https://www.playframework.com/documentation/2.4.x/ThreadPools,支持我的理解。

请注意,因此您可能会倾向于将阻止代码包装在Future中。这并不是说非阻塞,而是意味着阻塞将在另一个线程中发生。您仍然需要确保所使用的线程池具有足够的线程来处理阻塞。

另外,在JVM中,线程之间没有父子的概念。换句话说,所有线程均被平等对待。这意味着,即使主线程完成,寻址Future的线程也将继续运行。

但是,在下面的示例中,为什么在主线程结束时,Future线程也会被杀死。如果在示例末尾未注释掉sleep(10000),则可以看到Future结果。

val f3 = Future {
  sleep(5000)
  2
}

f3.onComplete {
  case Success(value) => println(s"f3's result = $value")
  case Failure(e) => e.printStackTrace
}

// do other work
println("A ...")
sleep(100)
println("B ...")
sleep(100)
println("C ...")
sleep(100)
println("D ...")
sleep(100)
println("E ...")
sleep(100)
println("F ...")
sleep(100)

// keep the JVM running
//  sleep(10000)

def sleep(duration: Long) {
  Thread.sleep(duration)
}
Run Code Online (Sandbox Code Playgroud)

java multithreading scala playframework

5
推荐指数
0
解决办法
680
查看次数

为什么print()有副作用?

为什么Scala中的print()方法有副作用?它只是阅读,而不是写.换句话说,print()不会改变任何东西.

我似乎是一个"愚蠢"的问题,但有时小事情会导致大动作.

functional-programming scala

2
推荐指数
1
解决办法
700
查看次数

当对象变异时,HashMap会自动更新

我有两个问题:

  1. 为什么HashMap使用密钥的内存地址作为映射条目的标识符,即桶.据我所知,只要我覆盖hashCode(),密钥的哈希码将用作桶ID.

  2. HashMap当密钥在下面的代码中发表评论时,为什么会更新:


object Equals {
  def main(args: Array[String]) {
    val pointX = new Point2(1, 1)
    val pointY = new Point2(2, 1)
    val pointZ = new Point2(4, 4)
    val map = HashMap(pointX -> "X", pointY -> "Y")
    println(s"Map before: $map")
    //Map before: Map(oo.Point2@20 -> X, oo.Point2@3f -> Y)
    pointX.move(3, 3)
    println(s"Map after: $map")
    //Map after: Map(oo.Point2@80 -> X, oo.Point2@3f -> Y)
    println(map(pointZ))
  }
}
class Point2(var x: Int, var y: Int) extends Equals {
  def …
Run Code Online (Sandbox Code Playgroud)

java hash scala hashmap

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

结合git add.和git提交

如何结合两个git命令.特别是,我想结合git add.git commit -m"message".例如,

gaddmit "message"
Run Code Online (Sandbox Code Playgroud)

应相当于:

git add .

git commit -m "message"
Run Code Online (Sandbox Code Playgroud)

其中gaddmit是我想要使用的别名.

git

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

使用高阶函数映射

这些陈述有什么区别?

val numbers = List(1, 2, 3, 4)
numbers map println
// vs.
numbers map (x => println(x))
Run Code Online (Sandbox Code Playgroud)

Scala如何知道println会反复处理每个数字

谢谢.

scala

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