淺析多任務(wù)多線程(隊(duì)列)示例代碼
前幾天需要使用一個(gè)多線程來完成工作,情況如下:
有一個(gè)列表,有N個(gè)任務(wù),現(xiàn)在需要M個(gè)線程去實(shí)現(xiàn)它,不懂代碼,沒有辦法完成,找同事完成了。
執(zhí)行的過程如下:
1、生成N個(gè)任務(wù)的隊(duì)列(此隊(duì)列為基類List,被封裝過,提供一個(gè)GetNext方法)
2、生成M個(gè)線程的數(shù)組(線程是經(jīng)過封裝的)
3、啟動(dòng)各個(gè)線程,
4、某一個(gè)線程完成,通知主線程完成了,并去調(diào)用隊(duì)列的GetNext方法,獲取下一個(gè)任務(wù),直到所有的完成。GetNext方法有Lock,防止任務(wù)分配重復(fù)。
5、運(yùn)行的過程當(dāng)中,可以調(diào)用隊(duì)列的Add方法,動(dòng)態(tài)增加任務(wù)。目前代碼中沒有寫減少任務(wù),加上去是非常簡(jiǎn)單的。
6、目前沒有做的,就是動(dòng)態(tài)增減線程的數(shù)量,但也不難,比如給封裝過的線程增加Remove方法,在線程內(nèi)部從最后一個(gè)線程往前遍歷,需要停止幾個(gè)就Stop幾個(gè)。
7、此方法比較適合隊(duì)列管理的情況,比如像下載軟件flashget,迅雷等
8、順便BS一下很多寫blog的人,受中國(guó)應(yīng)試教育的影響,很多是把理論搬上來,不知道想表達(dá)什么,cnblogs是該需要分成幾塊了,資料,心得,論壇,該去哪里去哪里,不免一些人說首頁發(fā)的文章,自己想看的太少了。
【編輯推薦】