java something

          不要以為......很遙遠
          隨筆 - 23, 文章 - 1, 評論 - 2, 引用 - 0
          數據加載中……

          復習下java多線程

          好久沒搞這個了,今天把以前的筆記整理下,當復習。

          Thread類和Runnable接口

          多線程是一個程序中可以有多段代碼同時運行,那么這些代碼寫在哪里,如何創建線程對象呢?

              首先,我們來看Java語言實現多線程編程的類和接口。在java.lang包中定義了Runnable接口和Thread類。

           

          Runnable接口中只定義了一個方法:

          ·         public abstract void run()

          這個方法要由實現了Runnable接口的類實現。Runnable對象稱為可運行對象,一個線程的運行就是執行該對象的run()方法。


                Thread
          類實現了Runnable接口,因此Thread對象也是可運行對象。同時Thread類也是線程類,該類的常用構造方法如下:

          ·         public Thread()

          ·         public Thread(Runnable target)

          ·         public Thread(String name)

          ·         public Thread(Runnable target, String name)
          target為線程運行的目標對象,即線程調用start()方法啟動后運行那個對象的run()方法,該對象的類型為Runnable,若沒有指定目標對象,則以當前類對象為目標對象,name為線程名


           

            線程的創建 

          介紹下如何創建和運行線程的兩種方法。線程運行的代碼就是實現了Runnable接口的類的run()方法或者是Thread類的子類的run()方法,因此構造線程體就有兩種方法:
              ·         繼承Thread類并覆蓋它的run()方法;
              ·        
          實現Runnable接口并實現它的run()方法。

            1,繼承Thread類創建線程

          通過繼承Thread類,并覆蓋run()方法,這時就可以用該類的實例作為線程的目標對象。下面的程序定義了SimpleThread類,它繼承了Thread類并覆蓋了run()方法。

          程序SimpleThread.java

          public class SimpleThread extends Thread{

            public SimpleThread(String str){

              super(str);

          }

          public void run(){

              for(int i=0; i<100; i++){

                System.out.println(getName()+" = "+ i);

                try{

                   sleep((int)(Math.random()*100));

                }catch(InterruptedException e){}

              }

          System.out.println(getName()+ " DONE");

          }

          }

          _____________________________________________________________________________

              SimpleThread類繼承了Thread類,并覆蓋了run()方法,該方法就是線程體。

          程序 ThreadTest.java

          public class ThreadTest{

            public static void main(String args[]){

              Thread t1 = new SimpleThread("Runner A");

              Thread t2 = new SimpleThread("Runner B");

              t1.start();

              t2.start();

           }

          }

          _____________________________________________________________________________

          ThreadTest類的main()方法中創建了兩個SimpleThread類的線程對象并調用線程類的start()方法啟動線程。構造線程時沒有指定目標對象,所以線程啟動后執行本類的run()方法。

          注意,實際上ThreadTest程序中有三個線程同時運行,在應用程序的main()方法啟動時,JVM就創建一個主線程,在主線程中可以創建其他線程。

            2,實現Runnable接口創建線程

          可以定義一個類實現Runnable接口,然后將該類對象作為線程的目標對象。實現Runnable接口就是實現run()方法。

          下面程序通過實現Runnable接口構造線程體。

          程序 ThreadTest.java

          class T1 implements Runnable{

            public void run(){

              for(int i=0;i<15;i++)

                System.out.println("Runner A="+i);

            }

          }

          class T2 implements Runnable{

            public void run(){

              for(int j=0;j<15;j++)

                System.out.println("Runner B="+j);

            }

          }

          public class ThreadTest{

            public static void main(String args[]){

              Thread t1=new Thread(new T1(),"Thread A");

              Thread t2=new Thread(new T2(),"Thread B");

              t1.start();

              t2.start();

            }

          }

          _____________________________________________________________________________




              

           



          posted on 2011-09-01 20:46 Jamie 閱讀(388) 評論(0)  編輯  收藏 所屬分類: 多線程

          主站蜘蛛池模板: 马山县| 达孜县| 宁明县| 连城县| 莱西市| 大丰市| 中超| 南安市| 岳普湖县| 泰兴市| 周宁县| 宝兴县| 维西| 浦城县| 安阳县| 威远县| 钟山县| 屏东市| 苏尼特左旗| 安岳县| 正阳县| 蒲江县| 乳山市| 三亚市| 红安县| 永嘉县| 吕梁市| 洛隆县| 来安县| 四平市| 陆丰市| 耿马| 余庆县| 浑源县| 江西省| 静海县| 江阴市| 青岛市| 沁阳市| 夹江县| 佛冈县|