在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