在Java它的工作原理通过接受其实现可运行的对象:如何初始化Kotlin中的线程?
Thread myThread = new Thread(new myRunnable())
其中myRunnable
是实施Runnable
一个类。
但当我这个在科特林,它不似乎工作:
var myThread:Thread = myRunnable:Runnable
在Java它的工作原理通过接受其实现可运行的对象:如何初始化Kotlin中的线程?
Thread myThread = new Thread(new myRunnable())
其中myRunnable
是实施Runnable
一个类。
但当我这个在科特林,它不似乎工作:
var myThread:Thread = myRunnable:Runnable
的Runnable:
val myRunnable = runnable {
}
主题:
Thread({
// call runnable here
println("running from lambda: ${Thread.currentThread()}")
}).start()
你没看到一个Runnable在这里:在Kotlin中它可以很容易地用lambda表达式替换。有没有更好的办法?当然!这里是你如何实例化和启动 线程科特林风格:
thread(start = true) {
println("running from thread(): ${Thread.currentThread()}")
}
@Mibac我提供了更多的选择 –
用于初始化的Thread
一个对象,你只需调用构造函数:
val t = Thread()
然后,你也可以通过一个可选的Runnable
与一个拉姆达(作品由于SAM转换)如下:
Thread {
Thread.sleep(1000)
println("test")
}
更明确的版本是传递匿名实现的Runnable
这样的心理状态:
Thread(Runnable {
Thread.sleep(1000)
println("test")
})
注意,前面显示的例子只做创建一个Thread
的一个实例,但实际上并没有启动。为了达到这个目的,你需要明确地调用start()
。
最后但并非最不重要的,你需要知道标准库函数thread
,我会推荐哪个用法:
public fun thread(start: Boolean = true, isDaemon: Boolean = false, contextClassLoader: ClassLoader? = null, name: String? = null, priority: Int = -1, block:() -> Unit): Thread {
//usage
thread(start = true) {
Thread.sleep(1000)
println("test")
}
它有许多例如可选参数如此处所示直接启动线程。
,所以线程在println后被杀死? – 2ndGAB
请试试这个代码:
Thread().run { Thread.sleep(3000); }
也尝试添加一些解释 –
虽然这可能会回答这个问题,但最好解释答案的基本部分,以及OPs代码可能存在的问题。 – pirho
最好的办法是使用thread()
发生器功能从kotlin.concurrent
: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/thread.html
你应该检查它的默认值,因为他们是非常有用:
thread() { /* do something */ }
请注意,您不需要拨打start()
就好像在Thre广告示例,或提供start=true
。
请注意长时间运行的线程。指定thread(isDaemon= true)
以便您的应用程序能够正确终止很有用。
'var myThread = Thread(myRunnable())' – Mibac
@Mibac It Worked !!你能帮我理解这段代码吗? –
做'myThread:Thread'说变量'myThread'的类型是'Thread'。做'myRunnable:Runnable'没有任何意义。在Kotlin中初始化类与Java非常相似。你只需删除'new'关键字。相关的Kotlin文档:[a](https://kotlinlang.org/docs/reference/classes.html#creating-instances-of-classes),[b](https://kotlinlang.org/docs/reference/basic -syntax.html #definition-local-variables) – Mibac