lbom

          小江西

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            18 隨筆 :: 21 文章 :: 69 評論 :: 0 Trackbacks

          在一次基于多線程的編碼測試中,發現繼承Runnable接口的線程實現類在運行時并未按預計啟動多線程,經分析和比較后,找出問題所現,現將其記錄下來,以供分享。

          Java中,多線程編程中的線程編寫,有兩種方式,即擴展Thread基類或繼承Runnable接口;例如:

          public class T extends Thread {

          public void run() {

          ……

          }

          }

          public class R implements Runnable {

          public void run() {

          ……

          }

          }

          對于擴展Thread的實現類T,可以使用T.start()來啟動此線程;如

          public static void main(String[] args) {

          Thread t = new T();

          t.start();

          }

          但對于繼承Runnable接口的實現類R,因接口中并沒有提供直接啟動線程的start()方法,只有一個線程主邏輯運行的run()方法。此時,如執行run(),會因為R.run()只是作為此線程實現類的一個方法,并未在主線程之外,啟動另一個線程,從而導致R.run()阻斷主線程繼續向下執行;并未達到多線程運行的目的。

          錯誤啟動代碼如下:

          public static void main(String[] args) {

          R r = new R();

          r.run();

          }

          那么,如何使用另外線程來啟動繼承Runnable接口的實現類呢?以下就是它的正確的使用方式:

          public static void main(String[] args) {

          R r = new R();

          Thread t = new Thread(r);

          t.start();

          }

          此時,需注意,在主線程執行時,需等待子線程執行,否則,當主線程結束后,子線程也將結束。

          posted on 2010-03-10 16:48 lbom 閱讀(1583) 評論(2)  編輯  收藏

          評論

          # re: Thread & Runnable[未登錄] 2010-03-12 19:34 feenn
          不應該出現這種低級錯誤,建議應該從理解入手,而不是只知道調用API。  回復  更多評論
            

          # re: Thread & Runnable 2010-03-13 15:06 隔葉黃鶯
          說到多線程一般都會說 Thread 和 Runnable,代碼表現即為:

          1:new Thread(){
          public void run(){
          //do something......
          }
          }.start();

          2:new Thread(new Runnable(){
          public void run(){
          //do something......
          }
          }).start();

          其實了解到 Thread 與 Runnable 是一種實現關系就知道以上兩種方式其實是一回事,究底來說 run() 方法都是由 Runnable 接口來約定的,要用 start() 方法來啟動線程,要跑的方法追到頭還是 Runnable 接口中的 run() 方法。  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 博白县| 肥乡县| 翁牛特旗| 玉田县| 宝兴县| 青神县| 古浪县| 安国市| 广灵县| 西贡区| 随州市| 北流市| 临泉县| 朝阳区| 白玉县| 喀喇沁旗| 大丰市| 姚安县| 永清县| 临清市| 涿州市| 夏津县| 奇台县| 邯郸市| 南昌县| 凭祥市| 买车| 三都| 洮南市| 新巴尔虎左旗| 潞西市| 汉阴县| 灵寿县| 游戏| 高清| 武功县| 民勤县| 广东省| 象山县| 沁源县| 拉孜县|