2019/04/20

[java][kotlin] Thread 與 Runnable 的使用時機與說明

多執行緒 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()
   }

沒有留言:

張貼留言