posts - 110, comments - 101, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          java 多線程中 start 與run 的區別

          Posted on 2011-11-08 20:53 云云 閱讀(2801) 評論(0)  編輯  收藏
          class NewThread implements Runnable {
          Thread t;
          public NewThread() {
          t = new Thread(this,"Demo thread");
          System.out.println("Child thread : " + t);
          t.run();
          }
          public void run(){
          try{
          for( int i = 5; i > 0; i --){
          System.out.println("Child thread :" + i);
          Thread.sleep(500);
          }

          }catch(InterruptedException e){
          System.out.println("Child interrupted.");
          }
          System.out.println("Exiting child thread.");

          }
          }

          public class TestDemo{
          public static void main(String args[]){
          new NewThread();
          try{
          for( int i = 5; i > 0; i --){
          System.out.println("Main thread :" + i);
          Thread.sleep(1000);
          }
          }catch(InterruptedException e){
          System.out.println("Main interrupted.");
          }
          System.out.println("Exiting Main thread.");
          }
          }

          這是一個實現多線程的程序,運行結果如下:
          Child thread : Thread[Demo thread,5,main]
          Main thread :5
          Child thread :5
          Child thread :4
          Main thread :4
          Child thread :3
          Child thread :2
          Main thread :3
          Child thread :1
          Exiting child thread.
          Main thread :2
          Main thread :1
          Exiting Main thread.

          試想,如果把 start()改成run()會出現什么結果?
          修改之后運行結果:
          Child thread : Thread[Demo thread,5,main]
          Child thread :5
          Child thread :4
          Child thread :3
          Child thread :2
          Child thread :1
          Exiting child thread.
          Main thread :5
          Main thread :4
          Main thread :3
          Main thread :2
          Main thread :1
          Exiting Main thread.
          程序運行成為了單線程順序執行。為什么?
          start方法:用來啟動一個線程, 這時此線程是處于就緒狀態, 并沒有運行。 然后通過此Thread類調用方法run()來完成其運行操作的, 這里方法run()稱為線程體, 它包含了要執行的這個線程的內容, run方法運行結束, 此線程終止, 而CPU再運行其它線程,
          直接用run方法: 這只是調用一個方法而已, 程序中依然只有主線程--這一個線程, 其程序執行路徑還是只有一條, 這樣就沒有達到寫線程的目的。
          記?。壕€程就是為了更好地利用CPU,提高程序運行速率的!

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


          網站導航:
           
          主站蜘蛛池模板: 盖州市| 北京市| 文水县| 宜丰县| 闸北区| 乡宁县| 延吉市| 余姚市| 哈密市| 江都市| 伊川县| 周至县| 浪卡子县| 彩票| 黔西| 潞西市| 三穗县| 炎陵县| 濮阳县| 绍兴市| 巴彦淖尔市| 九寨沟县| 临城县| 莫力| 嘉黎县| 虞城县| 崇义县| 印江| 平阴县| 中宁县| 额济纳旗| 宝兴县| 彰化县| 巴东县| 广平县| 阿拉善右旗| 鹤庆县| 新龙县| 伊吾县| 洛南县| 比如县|