?1、開啟一個新線程的方法,歸結(jié)起來不外乎有兩種:
4、處理 uncaught exceptions:
當(dāng)一個線程的run()方法執(zhí)行完畢或者run()方法執(zhí)行return語句時,線程正常中止。當(dāng)run方法拋出一個unchecked異常時(注意:run方法是不能拋出checked異常的),線程也會中止并且打印出異常信息。如果你想捕獲處理該異常,則必須為該線程添加一個uncaught exception handler來執(zhí)行。例如:
- 繼承類java.lang.Thread ,覆蓋其中的方法 run(); 實例化該子類,例如:public?class?MyThread?extends?Thread?
{
???public?void?run()?
??{
??????//?do?some?work
???}
}
//?code?to?use?MyThread
new?MyThread().start(); - 定義一個實現(xiàn)接口 java.lang.Runnable; 的類,實現(xiàn)該接口的方法run(); 然后將該類的一個實例作為實參傳給Thread的構(gòu)造方法。例如:public?class?MyThread2?implements?Runnable?
{
???public?void?run()?
??{
??????//?do?some?work
???}
}
//?code?to?use?MyThread2
Thread?t?=?new?Thread(MyThread2);
t.start(); - 無論用哪種方法最終得到的都是一個Thread的object,當(dāng)調(diào)用方法start()時,系統(tǒng)將創(chuàng)建一個新的線程來執(zhí)行run() 方法,這個新的線程將一直運行知道run方法退出。在新線程開始運行的同時,原來的線程也將繼續(xù)執(zhí)行start()之后的代碼。
- NEW : 線程已經(jīng)被創(chuàng)建,但是start()方法還沒被調(diào)用,所有的線程都是從這個狀態(tài)開始的
- RUNABLE : 該線程已經(jīng)在JVM上執(zhí)行了,但可能還在等待操作系統(tǒng)種的其他資源,也就是說要么現(xiàn)在就在運行,要么只要操作系統(tǒng)調(diào)度到該線程時立即就可以執(zhí)行。
- BLOCKED : 線程并沒有運行因為它必須等待直到獲得一個鎖以便進入一個synchronized的方法或者塊。
- WAITING : 線程并沒有運行因為它已經(jīng)調(diào)用了方法 Object.wait()或者 Thread.join( ).
- TIMED_WAITING :線程并沒有運行因為它已經(jīng)調(diào)用了Thread.sleep()或者調(diào)用了使用timeout值的Object.wait()或者 Thread.join( ).
- TERMINATED : 線程已經(jīng)完成執(zhí)行任務(wù),即run()方法要么正常退出,要么拋出一個異常。
public?final?static?int?MIN_PRIORITY?=?1;?//最小優(yōu)先級
public?final?static?int?NORM_PRIORITY?=?5;?//默認的優(yōu)先級
public?final?static?int?MAX_PRIORITY?=?10;?//最大優(yōu)先級
一個線程的優(yōu)先級可以是1到10中任何一個整數(shù)(包括1和10).方法 void setPriority(int newPriority) 可以用來設(shè)置線程有限級。關(guān)于優(yōu)先級需要注意的是,調(diào)度器總是選擇優(yōu)先級最高的線程來執(zhí)行,但是java的線程優(yōu)先級是和操作系統(tǒng)相關(guān)的,例如windows XP系統(tǒng)有7個優(yōu)先級,java中的某些優(yōu)先級會對應(yīng)到xp的7個優(yōu)先級中去。但是SUN 的linux版本的JVM上所有線程的優(yōu)先級都是NORM_PRIORITY。在使用優(yōu)先級的同時也要避免餓死的情況出現(xiàn)。public?final?static?int?NORM_PRIORITY?=?5;?//默認的優(yōu)先級
public?final?static?int?MAX_PRIORITY?=?10;?//最大優(yōu)先級
4、處理 uncaught exceptions:
當(dāng)一個線程的run()方法執(zhí)行完畢或者run()方法執(zhí)行return語句時,線程正常中止。當(dāng)run方法拋出一個unchecked異常時(注意:run方法是不能拋出checked異常的),線程也會中止并且打印出異常信息。如果你想捕獲處理該異常,則必須為該線程添加一個uncaught exception handler來執(zhí)行。例如:
package?uncaughtexception;
public?class?MyThread?implements?Runnable
{
????@Override
????public?void?run()
????{
????????throw?new?UnsupportedOperationException();
????}
}
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();
????}
}
運行結(jié)果: Hellopublic?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();
????}
}