我正在学习Scala。我正在阅读Scala计划:
class MyProg() extends StrictLogging with Runnable {
private val scheduledFuture = new AtomicReference[ScheduledFuture[_]]
def start() = {
scheduledFuture.set(executor.scheduleWithFixedDelay(this, initialDelaySeconds, intervalSeconds, TimeUnit.SECONDS))
}
def stop() = {
Option(scheduledFuture.get()).map(_.cancel(true))
}
override def run() = try {
process()
} catch {
case e: Exception => logger.warn("Error", e)
}
def process() :Unit {
// do something
if (condition) return // Line 203
// do something else
}
}
启动Runnable
的另一段代码:
Option(myProg).map(_.start)
我的问题:
1,从Runnable
内部返回是对的吗? process()
计划每intervalSeconds
秒运行一次。即使有时process()
从内部返回,它仍然会被称为intervalSeconds
秒之后。我是对的吗?
2,我们可以在这里使用System.exit(0)
或throw new Exception("...")
吗?调用System.exit(0)
或throw new Exception("...")
后,process()
将再次被称为 ?
def process() :Unit {}
?我们可以使用def process() :Unit = {}
吗?
欢迎任何评论。感谢
答案 0 :(得分:0)
return
来自process
函数,它不是最常用的惯用法,但它可以很好地完成它,有时它可以提高性能/可读性。
scheduleWithFixedDelay延迟是在一次执行终止和下一次执行开始之间。process
函数内抛出异常,它将重新运行。调度程序实际上运行run
函数,该函数捕获从process
抛出的所有异常。def process() :Unit {}
已弃用,不应使用。总是使用
def process() :Unit = {}
方式。这段代码似乎是从java转换而来的,我不认为学习scala是一个很好的起点。 无论如何,最好的学习方法就是尝试。花些时间与它“玩”一点。