Multithreading 如何理解Scala中的“new{}”语法?

Multithreading 如何理解Scala中的“new{}”语法?,multithreading,scala,Multithreading,Scala,我正在学习Scala多线程编程,并通过参考教程编写了一个简单的程序: object ThreadSleep extends App { def thread(body: =>Unit): Thread = { val t = new Thread { override def run() = body } t.start() t } val t = thread{println("New Therad")} t.join } 我

我正在学习Scala多线程编程,并通过参考教程编写了一个简单的程序:

object ThreadSleep extends App {
  def thread(body: =>Unit): Thread = {
    val t = new Thread {
      override def run() = body
    }
    t.start()
    t
  }
  val t = thread{println("New Therad")}
  t.join
}
我不明白为什么在新的线程{}语句中使用{}。我认为它应该是新的线程或新线程。我如何理解这个语法


这个问题没有完全重复到,因为我的问题是关于new{}的语法。

这是

new Thread() { ... } 
这称为匿名类,其工作原理与JAVA中的类似: 您在这里创建了一个新线程,其中包含一个重写的run方法。这很有用,因为如果只使用一次,就不必创建特殊类。 需要确认,但您可以覆盖、添加、重新定义所需的每个方法或属性


有关更多详细信息,请参见此处:

这是

new Thread() { ... } 
这称为匿名类,其工作原理与JAVA中的类似: 您在这里创建了一个新线程,其中包含一个重写的run方法。这很有用,因为如果只使用一次,就不必创建特殊类。 需要确认,但您可以覆盖、添加、重新定义所需的每个方法或属性

有关更多详细信息,请参见此处:

通过编写新线程{}创建线程的匿名子类,在其中重写run方法。通常,您希望创建Runnable的子类,并使用它创建线程,而不是子类化线程

这在语义上通常更为正确,因为只有在更专门化线程类(例如使用AbortableThread)的情况下,您才希望对线程进行子类化。如果您只想在线程上运行任务,可运行的方法更合适。

通过编写新的线程{},您可以创建一个匿名的线程子类,在其中重写run方法。通常,您希望创建Runnable的子类,并使用它创建线程,而不是子类化线程

这在语义上通常更为正确,因为只有在更专门化线程类(例如使用AbortableThread)的情况下,您才希望对线程进行子类化。如果您只想在线程上运行任务,可运行的方法更合适。

可能重复的可能重复的