多執行緒02 如何控制線程執行順序

2021-09-22 01:37:35 字數 3201 閱讀 4018

這裡使用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,其餘...