在Java中,它通过接受一个实现runnable的对象来工作:
Thread myThread = new Thread(new myRunnable())
其中myRunnable
是实现Runnable
的类。
但是当我在Kotlin尝试这个时,它似乎不起作用:
var myThread:Thread = myRunnable:Runnable
答案 0 :(得分:19)
对于初始化Thread
的对象,您只需调用构造函数:
val t = Thread()
然后,您还可以传递一个带有lambda(SAM转换)的可选Runnable
,如下所示:
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 {
你可以像这样使用它:
thread(start = true) {
Thread.sleep(1000)
println("test")
}
它有许多可选参数,例如直接启动线程,如下所示。请注意,true
无论如何都是start
的默认值。
答案 1 :(得分:5)
可运行:
val myRunnable = runnable {
}
主题:
Thread({
// call runnable here
println("running from lambda: ${Thread.currentThread()}")
}).start()
你在这里看不到Runnable:在Kotlin中,它可以很容易地用lambda表达式替换。有没有更好的办法?当然!以下是如何实例化和启动a 线程Kotlin风格:
thread(start = true) {
println("running from thread(): ${Thread.currentThread()}")
}
答案 2 :(得分:2)
我做了以下操作,它似乎按预期运行。
Thread(Runnable {
//some method here
}).start()
答案 3 :(得分:0)
请尝试以下代码:
Thread().run { Thread.sleep(3000); }
答案 4 :(得分:0)
最好的方法是使用thread()
中的kotlin.concurrent
生成器函数:
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/thread.html
您应该检查其默认值,因为它们非常有用:
thread() { /* do something */ }
请注意,您不需要像线程示例中那样致电start()
,或提供start=true
。
小心运行很长一段时间的线程。指定thread(isDaemon= true)
非常有用,这样您的应用程序就能够正确终止。
答案 5 :(得分:0)
fun main(args: Array<String>) {
Thread({
println("test1")
Thread.sleep(1000)
}).start()
val thread = object: Thread(){
override fun run(){
println("test2")
Thread.sleep(2000)
}
}
thread.start()
Thread.sleep(5000)
}
答案 6 :(得分:0)
Thread
与Lamda
的基本示例
fun main() {
val mylamda = Thread({
for (x in 0..10){
Thread.sleep(200)
println("$x")
}
})
startThread(mylamda)
}
fun startThread(mylamda: Thread) {
mylamda.start()
}
答案 7 :(得分:0)
thread { /* your code here */ }
答案 8 :(得分:0)
首先,创建一个用于设置默认属性的函数
fun thread(
start: Boolean = true,
isDaemon: Boolean = false,
contextClassLoader: ClassLoader? = null,
name: String? = null,
priority: Int = -1,
block: () -> Unit
): Thread
然后执行后台操作,调用此函数
thread(start = true) {
//Do background tasks...
}
或者Kotlin协程也可以用来执行后台任务
GlobalScope.launch {
//TODO("do background task...")
withContext(Dispatchers.Main) {
// TODO("Update UI")
}
//TODO("do background task...")
}