thread t1 =
newthread();
t1.start();
新建執行緒,應該呼叫start()方法啟動執行緒;如果直接呼叫run()方法,該方法也會執行,但會被當做乙個普通的方法,在當前執行緒中順序執行;而如果使用start()方法,則會建立乙個新的執行緒執行run()方法。
public
void
interrupt();
public
boolean
isinterrupted();
public
static
boolean
interrupted();
三個方法很相似,執行緒中斷只是通知目標執行緒有人希望你退出,而並不是使目標執行緒退出。
第乙個方法是通知目標執行緒中斷,即設定目標線稱的中斷標誌位;
第二個方法判斷當前執行緒是否被中斷,如果被中斷(即中斷標誌位被設定),則返回true,否則返回false;
第三個方法判斷當前執行緒的中斷狀態,並清除該執行緒的中斷標誌位(也就意味著,如果連續呼叫兩次該方法,並且中間沒有再次設定中斷標誌位,第二次會返回false,因為中斷標誌位已經被清除)。
public
static
native
void
sleep(long millis) throws interruptedexception;
sleep()方法會將當前執行緒休眠若干ms,如果在休眠期間被呼叫interrupt()方法,則會丟擲interruptedexception異常。如下:
public
class
testthread
implements
runnable
try catch (interruptedexception e)
thread.yield();}}
public
static
void
main(string args)
}
public
final
void
wait() throws interruptedexception;
public
final
native
void
notify();
public
final
native
void
notifyall();
obj.wait()是設定當前執行緒在該物件上等待,直到有執行緒呼叫obj.notify()方法(或notifyall()方法)。當呼叫wait()方法後,該執行緒會進入乙個等待佇列,等待佇列中可能有多個執行緒,notify()會隨機喚醒其中乙個執行緒,而notifyall()會喚醒所有執行緒。
wait()和notify()方法必須在sychronized**塊中,呼叫這些方法時都需要先獲得目標物件的乙個監視器,然後呼叫這些方法時會釋放監視器
與sleep不同的是,sleep()會一直占有所持有的鎖,而wait()會釋放鎖。
public
final
void
join() throws interruptedexception;
public
static
native
void
yield();
如果乙個執行緒的執行需要另乙個執行緒的參與(比如當前執行緒執行需要另乙個執行緒執行完畢才能繼續執行),這時候可以呼叫join()方法。t1.join()方法表示等待執行緒t1執行完畢之後,當前執行緒再繼續執行。當然也可以給join()設定時間引數。
注:join()的本質是讓呼叫執行緒wait()在當前執行緒物件例項上,其部分原始碼如下:
while (isalive())
當執行緒執行完畢後,它會讓被等待的執行緒在退出前呼叫notifyall()通知所有等待的執行緒繼續執行。因此不要在thread物件例項上使用類似wait()或者notify()等方法。
yield()方法是使當前執行緒讓出cpu,但該執行緒會再次搶奪cpu。
java中Thread類的join方法
單核cpu執行多執行緒時底層實現原理是多個執行緒間切換,由於cpu的處理速度很快,看上去像多個執行緒同時執行。那麼我們如何實現讓執行緒t1,t2,t3,在t1執行完成後才執行t2,t2執行完成後才執行t3,也就是執行緒的序列化,通過thread類的join方法就可以實現。join方法 將該執行緒加入...
java中的Thread類的join
join是thread的例項方法,官方解釋為 等待該執行緒終止。其作用就是將呼叫join的執行緒優先執行,當前正在執行的執行緒阻塞,直到呼叫join方法的執行緒執行完畢或者被打斷,主要用於執行緒之間的互動。還有兩個過載的方法 1 join long millis 等待該執行緒終止的時間最長為 mil...
Thread類中的常用方法
1.start 啟動當前執行緒 呼叫當前執行緒的run 2.run 通常需要重寫thread類中的此方法,將建立的執行緒要執行的操作宣告在此方法中 3.currentthread 靜態方法,返回執行當前 的執行緒 4.getname 獲取當前執行緒的名字 5.setname 設定當前執行緒的名字 6...