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 閱讀(964) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 河源市| 修武县| 禹州市| 宾川县| 牟定县| 民县| 高州市| 高雄县| 阜新| 贵南县| 乌拉特后旗| 越西县| 凤凰县| 纳雍县| 济源市| 宁德市| 泰州市| 靖宇县| 太谷县| 宁南县| 云安县| 阜阳市| 桃园县| 淮阳县| 霍林郭勒市| 哈密市| 商丘市| 天峻县| 长丰县| 钟山县| 乌拉特中旗| 赤水市| 嘉义市| 余干县| 绵竹市| 墨江| 西宁市| 彩票| 拜城县| 木里| 海晏县|