Multithreading 运行单独线程的结果不清楚
我有一些我认为是直截了当的事情,但后来我遇到了一个问题,我想了一会儿后不明白 下面是一段涉及两个线程的简单代码:Multithreading 运行单独线程的结果不清楚,multithreading,scala,java-threads,Multithreading,Scala,Java Threads,我有一些我认为是直截了当的事情,但后来我遇到了一个问题,我想了一会儿后不明白 下面是一段涉及两个线程的简单代码: package com.alexander.arendar package object concscalaprog { def thread(block: =>Unit):Thread = { val t = new Thread{ override def run(): Unit = block } t.run() t
package com.alexander.arendar
package object concscalaprog {
def thread(block: =>Unit):Thread = {
val t = new Thread{
override def run(): Unit = block
}
t.run()
t
}
}
及
我希望在控制台中看到与
主要
但这正是我所看到的程序输出。
你们能帮我理解为什么它不打印出它创建的独立线程的名称吗?这段代码片段
val t = new Thread{
override def run(): Unit = block
}
t.run()
使用重写方法run
定义Thread
类型的变量t
,然后立即在同一线程上调用run
这和写作没什么不同
abstract class Q { def bar(): Unit }
val q = new Q { def bar(): Unit = println(Thread.currentThread.getName) }
q.bar()
t
属于Thread
类型,而q
属于q
类型,这一事实是不相关的:run
和bar
都在主线程上执行,使用相同的堆栈
只需将run()
替换为start()
下面是一个简短的示例来演示:
lazy val t: Thread = new Thread {
override def run(): Unit = { println(Thread.currentThread == t) }
}
t.run()
给出的为假
,而
lazy val t: Thread = new Thread {
override def run(): Unit = { println(Thread.currentThread == t) }
}
t.start()
给出
true
以下是我在一行中对它的解释:lazy val t:Thread=new Thread{override def run():Unit={println(Thread.currentThread==t)};t、 运行
。现在,“为什么这个打印false
?”。我正在读这本书,并试图在一章的末尾做练习,注意到我的解决方案在测试中的表现并不像我预期的那样。所以我缩小了例子,看不出原因。你的例子对我来说更难理解,所以我不知道答案。我现在明白了。当我对你的问题发表评论时,我也不知道答案,我不得不重新阅读第32页,才碰到t.start()
行;)诚然,一旦你看到它,就有点明显了,但如果run/start
的区别在工作记忆中并不新鲜,那就有点令人惊讶了。
lazy val t: Thread = new Thread {
override def run(): Unit = { println(Thread.currentThread == t) }
}
t.start()