Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在sbt shell中运行测试后,如何关闭线程_Scala_Sbt - Fatal编程技术网

Scala 在sbt shell中运行测试后,如何关闭线程

Scala 在sbt shell中运行测试后,如何关闭线程,scala,sbt,Scala,Sbt,我将sbt 0.13.9与scalatest一起使用。该项目包含一组守护进程线程。简化示例: object Storage { private lazy val scheduler = Executors.newSingleThreadScheduledExecutor( new com.twitter.concurrent.NamedPoolThreadFactoryNamedPoolThreadFactory("thread-name", true) ) schedul

我将sbt 0.13.9与scalatest一起使用。该项目包含一组守护进程线程。简化示例:

object Storage {
  private lazy val scheduler = Executors.newSingleThreadScheduledExecutor(
    new com.twitter.concurrent.NamedPoolThreadFactoryNamedPoolThreadFactory("thread-name", true)
  )

  scheduler.scheduleAtFixedRate(new Runnable {
    override def run(): Unit = {
      println("Running ...")
      // do something
    }
  }, 0, 1, TimeUnit.MINUTES)

  // other code
}
有些测试使用
存储
。在SBT shell中运行
test
时,我可以看到
Runnable
在所有测试完成后仍在运行

[info] All tests passed.
[success] Total time: 32 s, completed Dec 1, 2015 10:39:57 AM
> 2015-12-01 10:40:51,806 INFO  Storage$$anon$1 - Running ...
2015-12-01 10:41:51,810 INFO  Storage$$anon$1 - Running ...

如何确保它们已停止?

看起来daemon threadFactory用于创建
Runnable
任务,但调度程序本身是在正常/非daemon线程池上执行的

作为一种选择。 在安排任务后,您应该采取
schedulefourture
并处理它。例如,执行一些操作后,取消

val fff = scheduler.scheduleAtFixedRate(new Runnable {
    override def run(): Unit = {
      println("Running ...")
      // do something
    }
  }, 0, 10, TimeUnit.SECONDS)


  fff.cancel(true)

如果将
true
作为秒参数发送,则在
NamedPoolThreadFactory
中已经完成了此操作。我已经查看了我的答案。调度程序是从测试线程创建的。测试实例化一个包含调度程序的对象。我无法取消
ScheduledFuture
,因为这是一项定期任务。