一道題檢測多執行緒基本功! 順序列印ABC

2021-10-16 08:41:15 字數 1850 閱讀 8458

題目內容:

有三個執行緒,執行緒名稱分別為:a,b,c。

要求:使三個執行緒同時啟動,並按順序列印a,b,c。

注:有的人看到這個題目,直接就是建立三個執行緒,然後直接呼叫對應的star()方法,這當然是個坑啦。這裡我們可以想到join方法,讓a執行緒跑完,再跑b,b執行緒跑完再跑c。

public

class

printabc

,"a");

thread b =

newthread((

)->

catch

(interruptedexception e)

system.out.

print

(thread.

currentthread()

.getname()

);},

"b")

; thread c =

newthread((

)->

catch

(interruptedexception e)

system.out.

print

(thread.

currentthread()

.getname()

);},

"c")

; a.

start()

; b.

start()

; c.

start()

;}}

看上去是不是超簡單?這道題高階一下再看看。

題目內容:

還是有三個執行緒,分別列印a,b,c。

要求:按順序列印abc,列印10次,同時啟動這三個執行緒。注意:不要用sleep等變相啟動執行緒的方法。

分析:連續列印10次,並且需要有順序,那麼就可以聯想到執行緒間通訊來解決這個問題。

每個執行緒分別對應列印a、b、c,那麼就可以使用陣列將他們三個儲存起來,稱為共享資源,匹配到了,則輸出。

利用陣列的特性,那麼我們就可以使用對應下標去尋找對應陣列中的字母,並且可以實現多次迴圈,按順序進行。

由此看來,三個執行緒執行的都是相同功能,可以單獨寫乙個類來封裝,使得**簡便。

public

class

sequenceprint

private

static

class

task

implements

runnable

;private

static

int index;

//從陣列哪個索引列印

public

task

(string content)

@override

public

void

run(

)//如果陣列要列印的內容和當前執行緒要列印的一致,

//就列印,並把陣列索引切換到乙個位置,通知其他執行緒

system.out.

print

(content);if

(index == arr.length -1)

//控制下標始終在0,1,2裡面迴圈

index =

(index +1)

% arr.length;

//該執行緒執行完了,喚醒下乙個執行緒向下執行

arr.

notifyall()

;}}}

catch

(interruptedexception e)}}

}

一道題檢測是否理解指標

這道題給我的感覺就是,指標跳過來跳過去,眼花繚亂 大家也來看看 如下 include using namespace std int findsubstring char pch else int count2 count while p1 0 else if count2 0 return cou...

C 中一道關於多執行緒的程式設計題

題目的意思是這樣的 讓兩個執行緒a和b將自己的id輪番寫入乙個檔案中,每個執行緒重複十次寫入後執行乙個 函式,說 i m ok 就這樣。我是一名qa,不是開發,出於興趣報考了公司的c 課程考試,多執行緒那些知識我也認真聽過課,但是總歸沒有機會實際運用過,所以一到真正要動手寫的時候也就基本等於不會了,...

關於多執行緒的一道題目

題目大意 有四個執行緒,每個執行緒輸出1,2,3,4,設計程式使得依次輸出 1111222233334444 求解思路 建立乙個物件o,當四個執行緒依次輸出1後,檢測已經輸出的次數count,如果輸出次數為1,2,3,那麼讓執行緒進入物件o的等待集,如果為4,那麼喚醒o中等待集中所有執行緒並將cou...