java的線程是通過java.lang.thread類來實作的。
調用完構造函數後,線程就為建立狀态。
調用start()方法後,所處的狀态。
正常的運作。
資源等待的狀态。
run()方法執行完畢後,該線程就死掉了。注意不能再次調用此線程的start()方法。
java.lang.thread.thread(runnable target, string name)
建立新線程,并指定線程的名字。
java.lang.thread.thread(threadgroup group, runnable target, string name)
建立新線程,并指定線程的名字和所屬線程組。
void java.lang.thread.start()
讓線程置于就緒狀态,等待作業系統排程。

問:它與run()有什麼差別呢?
答:start()是異步的,會新起一個線程,在新的線程中調用run()方法。直接調用run()就是在目前線程中執行同步的方法。
thread java.lang.thread.currentthread()
傳回目前線程。
string java.lang.thread.getname()
傳回線程名稱。
boolean java.lang.thread.isdaemon()
是否是一個背景線程。
void java.lang.thread.yield()
告訴作業系統此時可以進行線程切換。使用此方法有助于暴露線程不安全問題導緻的異常現象。
java.lang.thread.sleep(long millis, int nanos)
目前線程睡眠(millis 毫秒+nanos納秒)。此方法會被timeunit這個枚舉類型調用,可見:void java.util.concurrent.timeunit.sleep(long timeout)。
void java.lang.thread.join(long millis)
此函數是同步的,當線程結束或等待達到逾時時間後傳回。
thread 的stop()與destory()方法被廢棄,直接調用會有異常,見下:
是以現在你不能暴力地中斷一個線程,隻能讓線程自己來配合。
void java.lang.thread.interrupt()
thread類有一個布爾字段isinterrupted,用來标記自己是否被中斷。調用此方法會置這個變量為true。如果此線程被join()、wait()、sleep()方法阻塞,那麼調用interrupt()方法時會引起interruptedexception異常。
boolean java.lang.thread.isinterrupted()
傳回上面說的isinterrupted布爾變量。
run()裡面的whilr(true) 被 替代,這樣更優雅。一旦run()函數執行完畢,一個線程也就完成了它的使命。
java.lang.runnable
它是一個接口,有run()方法。
接口定義見下:
想要被作為新線程運作的類需要實作runnable接口,在run()函數中完成待處理的任務。
1.定義類a繼承接口runnable,并實作函數 void run();
2.用a的對象構造thread對象。然後調用start()函數。
注意:start()函數為異步調用,立即傳回啦。
java.lang.callable
它是一個接口,有call()方法,用于具有傳回值的多線程任務。
接口定義見下。
例子:
java.util.concurrent.future<e>
future對象代表着一個異步操作的結果。調用此對象的isdone()方法來查詢任務是否已完成,它是異步的。調用get()方法擷取線程執行結果,它是同步的,在結果準備就緒前一直阻塞。
它的接口定義見下: