一個經典線程面試題的解決方法

原題目如下:

啟動3個線程打印遞增的數字, 線程1先打印1,2,3,4,5, 然後是線程2打印6,7,8,9,10, 然後是線程3打印11,12,13,14,15. 接著再由線程1打印16,17,18,19,20....以此類推, 直到打印到75. 程序的輸出結果應該為:

線程1: 1

線程1: 2

線程1: 3

線程1: 4

線程1: 5

線程2: 6

線程2: 7

線程2: 8

線程2: 9

線程2: 10

...

線程3: 71

線程3: 72

線程3: 73

線程3: 74

線程3: 75

對於這個問題,使用Lock和Condition來解決比較容易,

首先定義一個類,將這個數字定義到此類中,需要三個線程

來完成這個結果,所以定義一個標識來確定哪個線程進行操作,還需要定義三個方法,每個方法完成一個線程需要完成的內容,定義的類如下:

一個經典線程面試題的解決方法

三個方法如下:

第一個方法

一個經典線程面試題的解決方法

第二個方法:

一個經典線程面試題的解決方法

第三個方法:

一個經典線程面試題的解決方法

然後最後定義三個線程來調用定義的方法:

如下:

一個經典線程面試題的解決方法

一個經典線程面試題的解決方法

最後調用就可以打印出要求的結果。

完!


分享到:


相關文章: