Jafe Lee

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            49 隨筆 :: 0 文章 :: 24 評論 :: 0 Trackbacks
          ?1、開啟一個新線程的方法,歸結起來不外乎有兩種:
          • 繼承類java.lang.Thread ,覆蓋其中的方法 run(); 實例化該子類,例如:
            public?class?MyThread?extends?Thread?
            {
            ???
            public?void?run()?
            ??{
            ??????
            //?do?some?work
            ???}
            }
            //?code?to?use?MyThread
            new?MyThread().start();
          • 定義一個實現接口 java.lang.Runnable; 的類,實現該接口的方法run(); 然后將該類的一個實例作為實參傳給Thread的構造方法。例如:
            public?class?MyThread2?implements?Runnable?
            {
            ???
            public?void?run()?
            ??{
            ??????
            //?do?some?work
            ???}
            }

            //?code?to?use?MyThread2
            Thread?t?=?new?Thread(MyThread2);
            t.start();
          • 無論用哪種方法最終得到的都是一個Thread的object,當調用方法start()時,系統將創建一個新的線程來執行run() 方法,這個新的線程將一直運行知道run方法退出。在新線程開始運行的同時,原來的線程也將繼續執行start()之后的代碼。
          2、一個線程的生命周期:每個線程的生命周期(lifecycle)一共有六個狀態(state),這六個狀態用枚舉類型Thread.State的六個枚舉常量來表示。分別是:
          3、線程優先級:線程可以有不同優先級,Thread定義了三個優先級常量:
          public?final?static?int?MIN_PRIORITY?=?1;?//最小優先級
          public?final?static?int?NORM_PRIORITY?=?5;?//默認的優先級
          public?final?static?int?MAX_PRIORITY?=?10;?//最大優先級
          一個線程的優先級可以是1到10中任何一個整數(包括1和10).方法 void setPriority(int newPriority) 可以用來設置線程有限級。關于優先級需要注意的是,調度器總是選擇優先級最高的線程來執行,但是java的線程優先級是和操作系統相關的,例如windows XP系統有7個優先級,java中的某些優先級會對應到xp的7個優先級中去。但是SUN 的linux版本的JVM上所有線程的優先級都是NORM_PRIORITY。在使用優先級的同時也要避免餓死的情況出現。

          4、處理 uncaught exceptions:
          當一個線程的run()方法執行完畢或者run()方法執行return語句時,線程正常中止。當run方法拋出一個unchecked異常時(注意:run方法是不能拋出checked異常的),線程也會中止并且打印出異常信息。如果你想捕獲處理該異常,則必須為該線程添加一個uncaught exception handler來執行。例如:
          package?uncaughtexception;
          public?class?MyThread?implements?Runnable
          {
          ????@Override
          ????
          public?void?run()
          ????{
          ????????
          throw?new?UnsupportedOperationException();
          ????}
          }


          package?uncaughtexception;

          public?class?TestMyThread
          {
          ????
          public?static?void?main(String?[]?args)
          ????{
          ????????Thread?aThread?
          =?new?Thread(new?MyThread());
          ????????
          ????????aThread.setUncaughtExceptionHandler(
          new?Thread.UncaughtExceptionHandler()
          ????????{
          ????????????@Override
          ????????????
          public?void?uncaughtException(Thread?t,?Throwable?e)
          ????????????{
          ????????????????System.out.println(
          "Hello");
          ????????????}
          ????????});
          ????????
          ????????aThread.start();
          ????}
          }
          運行結果: Hello
          posted on 2007-09-12 21:32 Jafe Lee 閱讀(955) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 峨山| 鄂尔多斯市| 靖西县| 温宿县| 治县。| 林州市| 海口市| 会东县| 光山县| 沈丘县| 鸡西市| 怀安县| 尉犁县| 陇川县| 东阳市| 元阳县| 祁东县| 静安区| 南澳县| 衡水市| 彭泽县| 工布江达县| 瑞安市| 云南省| 玉环县| 常德市| 白银市| 中牟县| 清新县| 习水县| 镇巴县| 广河县| 阜康市| 民勤县| 青河县| 昆明市| 仙桃市| 白山市| 唐山市| 凤山县| 新昌县|