這裡使用join()方法:
api中那句「等待該執行緒終止」,主語是join方法被呼叫時所處的執行緒,「該執行緒」是指呼叫join方法的執行緒。
比如現在有a、b兩個執行緒物件,在a執行緒**現b.join(),那麼a執行緒將會被阻塞(或者說掛起),直到b執行緒執行完畢才會繼續執行b.join()語句下面的**,即繼續執行a執行緒。
澄清概念:join() 的作用不是讓「主線程」等待「子執行緒」結束之後才能繼續執行,而是哪個執行緒內出現join方法,哪個執行緒就會被掛起。
下面一共4個執行緒,其中含3個其它執行緒(或者叫子執行緒),我們的目的是先建立的子執行緒執行緒先執行完。
此時有兩種方式,第一種是將主線程作為標準,每個執行緒依次阻塞主線程,**如下:
public class mythread1 extends thread
public void othermethod() }}
public class mythread2 extends thread
public void othermethod() }}
public class mythread3 extends thread
public void othermethod() }}
public class test catch (interruptedexception e)
//執行主線程中方法
mainmethod(); }
public static void mainmethod()
} }
結果:
主線程名稱》main
繼承thread執行緒名稱》thread-0
繼承thread>>thread-0:數值》10
繼承thread>>thread-0:數值》11
繼承thread>>thread-0:數值》12
繼承thread>>thread-0:數值》13
繼承thread>>thread-0:數值》14
繼承thread>>thread-0:數值》15
繼承thread執行緒名稱》thread-1
繼承thread>>thread-1:數值》20
繼承thread>>thread-1:數值》21
繼承thread>>thread-1:數值》22
繼承thread>>thread-1:數值》23
繼承thread>>thread-1:數值》24
繼承thread>>thread-1:數值》25
繼承thread執行緒名稱》thread-2
繼承thread>>thread-2:數值》30
繼承thread>>thread-2:數值》31
繼承thread>>thread-2:數值》32
繼承thread>>thread-2:數值》33
繼承thread>>thread-2:數值》34
繼承thread>>thread-2:數值》35
主線程》main:數值》1
主線程》main:數值》2
主線程》main:數值》3
主線程》main:數值》4
第二種是在主線程的主方法裡面使用join()方法,第乙個子執行緒啟動後,join一下,那麼主線程就會被阻塞,直到該執行緒執行完畢才會向下執行其它**。
第乙個子執行緒裡的目標方法執行完,第二個子執行緒在第乙個子執行緒**內join;第二個子執行緒目標方法執行完,第三個子執行緒在第二個子執行緒**內join。等第三個子執行緒join完畢,第二個子執行緒、第乙個子執行緒才算執行完畢,此時回到主線程。
public class test catch (interruptedexception e)
//執行主線程中方法
mainmethod(); }
public static void mainmethod()
} }public class mythread1 extends thread catch (interruptedexception e)
}public void othermethod() }}
public class mythread2 extends thread catch (interruptedexception e)
} public void othermethod() }}
public class mythread3 extends thread
public void othermethod()
}}
結果:
主線程名稱》main
繼承thread執行緒名稱》thread-0
繼承thread>>thread-0:數值》10
繼承thread>>thread-0:數值》11
繼承thread>>thread-0:數值》12
繼承thread>>thread-0:數值》13
繼承thread>>thread-0:數值》14
繼承thread>>thread-0:數值》15
繼承thread執行緒名稱》thread-1
繼承thread>>thread-1:數值》20
繼承thread>>thread-1:數值》21
繼承thread>>thread-1:數值》22
繼承thread>>thread-1:數值》23
繼承thread>>thread-1:數值》24
繼承thread>>thread-1:數值》25
繼承thread執行緒名稱》thread-2
繼承thread>>thread-2:數值》30
繼承thread>>thread-2:數值》31
繼承thread>>thread-2:數值》32
繼承thread>>thread-2:數值》33
繼承thread>>thread-2:數值》34
繼承thread>>thread-2:數值》35
主線程》main:數值》1
主線程》main:數值》2
主線程》main:數值》3
主線程》main:數值》4
目前來看兩種方式結果相同,但是執行緒之間穿插執行,只能是第二種方式。比如第乙個子執行緒待第二個子執行緒結束之後還要執行一段**。 如何控制線程執行的順序?
public class myservice for int i 0 i 2 i ordernum 2 notifyall catch interruptedexception e public synchronized void methodb for int i 0 i 2 i ordernum...
如何控制線程執行的順序?
1 如何控制線程執行的順序?有三個執行緒,讓這三個執行緒按照我們指定的順序執行!答 1.join 方法 讓主線程等待其他執行緒執行完成之後執行。讓主線程放棄cpu的控制權,等待呼叫join方法的執行緒執行完成之後再執行!join 方法底層呼叫的wait 方法,是讓主線程等待其他執行緒執行完成之後執行...
控制線程的執行順序
在此之前實現了兩個執行緒的交替執行,那麼也該來研究一下如何控制線程的執行順序。此筆記只有部分實現。1,使用join 簡單易操作,此方法有個缺陷就是 呼叫程式寫起來有點冗長,如果有n個執行緒,那麼main 就會非常長,而且有些許重複 program description 控制線程的執行順序 1,其餘...