我正在学习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 Thread {}
。我认为它应该是new Thread
或new Thread()
。我该如何理解这种语法?
这个问题并没有完全复制到this one,因为我的问题是关于“new {}
”的语法。
答案 0 :(得分:3)
这是
的快捷方式Display display = new Display();
Listener filter = new Listener() {
@Override
public void handleEvent( Event event ) {
if( /* condition */ ) {
event.doit = false;
}
}
};
display.addFilter( SWT.MouseDown, filter );
这称为匿名类,它就像在JAVA中一样:
您在这里使用覆盖new Thread() { ... }
方法创建新线程。这很有用,因为如果您只使用一次,则不必创建特殊类。
需要确认,但您可以覆盖,添加,重新定义所需的每个方法或属性。
请点击此处了解详情:https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
答案 1 :(得分:2)
通过编写new Thread{}
您创建Thread
的匿名子类,您将覆盖run
方法。通常,您更喜欢创建Runnable
的子类并使用它创建一个线程而不是子类化Thread
val r = new Runnable{ override def run { body } }
new Thread(r).start
这通常在语义上更正确,因为只有当您专门研究Thread
类时,例如使用Thread
,您才想要继承AbortableThread
。如果您只想在线程上运行任务,Runnable
方法就更合适了。