多執行緒 Thread 與 Runnable的使用一直以來不是很得要領 許多書上或網路上的說明都無法讓我完全理解 偶然的一篇文章,讓我豁然開朗,趕緊記錄下自己的理解與心得。
對java 與 kotlin來說要給其他執行續執行的程式必須單獨用一個class包裝起來 這句話的意思是,一定得是呼叫另一個class來執行多執行緒,而不是 在目前的class呼叫fun來執行多執行緒。 在這個認知的前提下,就可以很明確的區分Thread 與 Runnable的使用時機:
Thread: Thread的用途是,class可以繼承Thread的時候也就是,請看程式碼: java public class test extends Thread { @Override public void run() { super.run(); } } kotiln public class ApiBase: Thread() { override fun run() { super.run() } } 以上要執行多執行緒的程式全都寫到 run的方法裡,使用時只需要呼叫 .start()方法就好
Runnable: Runnable的用途是,當class無法繼承Thread的時候,也就是class已經繼承了其他類別 請看程式碼: java public class test implements Runnable { @Override public void run() { super.run(); } } kotiln public class ApiBase: Runnable { override fun run() { TODO("not implemented") } } 以上要執行多執行緒的程式除了都寫到 run的方法裡之外,在使用上還要特別注意的是 Runnable 畢竟只是一個介面,所以在使用上 還是必須掀起動一個Thread,再把Runnable丟入執行。 請看範例: java public class test implements Runnable { @Override public void run() { super.run(); } } public class test2 { test ts1 = new test(); Thread thr = new Thread(ts1); thr.start(); } kotiln public class ApiBase: Runnable { override fun run() { TODO("not implemented") } } public class test2 { val ts1: test = test() val thr: Thread = Thread(ts1) thr.start() }
沒有留言:
張貼留言