2017-09-30 84 views
4

在Java它的工作原理通過接受其實現可運行的對象:如何初始化Kotlin中的線程?

Thread myThread = new Thread(new myRunnable()) 

其中myRunnable是實施Runnable一個類。

但當我這個在科特林,它不似乎工作:

var myThread:Thread = myRunnable:Runnable 
+0

'var myThread = Thread(myRunnable())' – Mibac

+0

@Mibac It Worked !!你能幫我理解這段代碼嗎? –

+0

做'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

回答

0

的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()}") 
    } 
+0

@Mibac我提供了更多的選擇 –

4

用於初始化的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") 
} 

它有許多例如可選參數如此處所示直接啓動線程。

+0

,所以線程在println後被殺死? – 2ndGAB

0

請試試這個代碼:

Thread().run { Thread.sleep(3000); } 
+2

也嘗試添加一些解釋 –

+0

雖然這可能會回答這個問題,但最好解釋答案的基本部分,以及OPs代碼可能存在的問題。 – pirho

0

最好的辦法是使用thread()發生器功能從kotlin.concurrenthttps://kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/thread.html

你應該檢查它的默認值,因爲他們是非常有用:

thread() { /* do something */ } 

請注意,您不需要撥打start()就好像在Thre廣告示例,或提供start=true

請注意長時間運行的線程。指定thread(isDaemon= true)以便您的應用程序能夠正確終止很有用。