題目內容:有三個執行緒,執行緒名稱分別為: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...