首先,我們準備成立一家搬家公司,於是要準備好將來和客戶籤的合同書:
1: public class contract
2:
4: public string from
5: public string to
6: public decimal fee
7: 8: public contract()
9:
12: }
現在我們就去申請註冊一家公司,並組建好初創團隊,哪怕目前還只有老闆乙個人:
1: public class housemovingcompany
2:
7: }
8: 9: public list contracts
10:
11: public housemovingcompany()
12:
15:
16: public void movehouse()
17:
22:
23: contract contract = contract = this.contracts[0];
24: this.contracts.removeat(0);
25:
26: if (!string.isnullorempty(contract.from) && !string.isnullorempty(contract.to))
27: to .」, contract.from, contract.to);
29: }
30:
31: thread.sleep(5000);
32: }
33: }
好了,現在公司實體有了,老闆就可以開始忙活了:
1: static void main(string args)
2: );
4: 5: while (housemovingcompany.instance.contracts.count > 0)
6:
9: }
我們在前面設定了每次搬家耗時5秒鐘,咱們把它想象成5個小時。嗯,一天接乙個單子,還可以接受,但是隨著老闆生意日漸興隆,有時候一天要接3個單子,這就最少要工作15個小時了,還要操心公司的運營等問題,的確忙不過來了,而且照這樣算,老闆一天不可能完成5個或5個以上的單子,嚴重制約了公司的發展:
1: static void main(string args)
2: );
4: housemovingcompany.instance.contracts.add(new contract );
5: housemovingcompany.instance.contracts.add(new contract );
6: 7: while (housemovingcompany.instance.contracts.count > 0)
8:
11: }
一天夜裡,老闆拖著疲倦的身子回到家裡,一進門就一頭倒在床上,他極力睜著快睜不開的眼睛,努力地對自己說:「不行,我一定要想個辦法,不然我會被累死的!」。
1: static void main(string args)
2: );
4: housemovingcompany.instance.contracts.add(new contract );
5: housemovingcompany.instance.contracts.add(new contract );
6: 7: thread thread = null;
8: 9: while (housemovingcompany.instance.contracts.count > 0)
10:
15: }
在這段程式中,我們分頭行動,讓每項搬家任務都由乙個小團隊去完成,結果我們發現,現在做三個單子的時間跟做乙個單子的時間是一樣的,提高了效率也擴大了公司規模。但是,既然引入了新的工作機制,我們在公司內部也不得不做一些小小的調整:
1: public void movehouse()
2:
7: 8: contract contract = null;
9: 10: lock (this.contracts)
11:
15:
16: if (!string.isnullorempty(contract.from) && !string.isnullorempty(contract.to))
17: to .」, contract.from, contract.to);
19: }
20:
21: thread.sleep(5000);
22: }
調整的只是movehouse這個方法內部的一些實現細節。公司接到的單子都儲存在contracts中,所以搬家的時候需要去拿乙個單子然後根據單子上的資訊來工作。原先我們只有乙個執行緒在操作contracts,倒也不覺得什麼,現在有多個執行緒都在對contracts中的元素進行訪問,我們不得不提防一些意外發生。這就是在使用多執行緒的時候常常需要考慮的併發問題,所以我們用了lock關鍵字,當乙個執行緒要操作contracts時,它先把contracts鎖起來,其實就是宣告一下:「現在我在操作它,你們誰都不要動,等我弄完了再說。」在lock塊結束時被鎖定的物件才會被解鎖,其它的執行緒現在才可以去操作它。
有了多執行緒機制,你會發現程式可以在更短的時間內完成更多的事情。本文沒有將多執行緒機制中的所有概念面面俱到地列舉出來,但是已經向你展示了該如何使用多執行緒以及什麼時候可以考慮使用多執行緒,其它的一些細節有待你去進一步探索,例如,你可以設定執行緒的優先順序(假設邏輯上跟fee掛鉤,類似於『加急』)等等。
掌握多執行緒機制,並讓它使你的應用程式變得更加強悍吧。
上海搬家公司一覽表
福成搬場服務 通閣路215弄4號207 56703000 新城搬場公司 浦三路2418號 58495885 強豐搬場服務隊 金山區板橋路1號 57260149 晶瑩池宮 沈家弄路320弄21 2 58799873 家佳搬場 場中路32弄39號101 65310172 浦益搬場中心 浦東南路白蓮涇毛家...
C 多執行緒處理
region 變數初始化 string tx 任務執行緒分派數 每次設定一組 一組十個執行緒 任務執行緒 限制最多十個執行緒 long threadcount 0 long maxthreadcount 10 manualreseteventslim manual new manualresetev...
多執行緒處理任務
進行任務分解 long begin system.currenttimemillis list futurelist this.getsmoothdatafuture fundidlist,30 阻塞等待所有執行緒全部執行完畢 for futurefuture futurelist log.info...