在達(dá)內(nèi)開始學(xué)習(xí)一門編程語言時(shí),老師們都會(huì)強(qiáng)調(diào)運(yùn)行程序的入口是主函數(shù),程序會(huì)從主函數(shù)的句代碼開始執(zhí)行。但在課程的后面,一般會(huì)涉及到多線程的教學(xué)。以Java培訓(xùn)班的學(xué)生舉例,一開始當(dāng)學(xué)生遇到調(diào)用函數(shù)的代碼時(shí)程序會(huì)去執(zhí)行對(duì)應(yīng)函數(shù)的代碼,執(zhí)行結(jié)束后回到主程序繼續(xù)執(zhí)行下一句代碼,當(dāng)主函數(shù)的代碼都執(zhí)行完畢后,程序就會(huì)結(jié)束并退出。也就是說在一般情況下,程序只會(huì)執(zhí)行一個(gè)流程,就算代碼中有多個(gè)事件需要進(jìn)行處理,程序也會(huì)按照代碼的排列順序按序執(zhí)行。
若以我們的身體來做比喻的話,程序就像是我們的大腦,假設(shè)我們要完成一個(gè)拍手的動(dòng)作,那么就需要雙手同時(shí)做出動(dòng)作向一個(gè)位置拍擊,但如果是按照上述的執(zhí)行方式的話,那就是先把一只手移到目標(biāo)位置,完成后再把另一只手移過去,這樣的視覺效果既滑稽,又拍不響。所以在編程時(shí),我們也會(huì)需要程序去同時(shí)執(zhí)行多個(gè)函數(shù),實(shí)現(xiàn)流暢的運(yùn)行效果以及豐富的功能,所以就會(huì)使用Java多線程編程。
另外,線程在Unix系統(tǒng)下,通常被稱為輕量級(jí)的進(jìn)程,線程雖然不是進(jìn)程,但卻可以看作是Unix進(jìn)程的表親,同一進(jìn)程中的多條線程將共享該進(jìn)程中的全部系統(tǒng)資源,如虛擬地址空間,文件描述符和信號(hào)處理等等。但同一進(jìn)程中的多個(gè)線程有各自的調(diào)用棧,自己的寄存器環(huán)境,自己的線程本地存儲(chǔ)。一個(gè)進(jìn)程可以有很多線程,每條線程并行執(zhí)行不同的任務(wù)。
以上就是Java培訓(xùn)班老師為大家解釋為什么要使用多線程編程的原因。達(dá)內(nèi)告誡大家的是,不管你學(xué)的是什么編程語言,都是從易到難的,一開始也許只是單線程,但在后面遇到更難的部分,例如多線程,一定要深入去理解,而不只是照著例子去編寫代碼。只有帶著腦子去學(xué),才能真正掌握所學(xué)的技能。