線程的定義
輕量級(jí)進(jìn)程彤恶,英文Lightweight Process钞钙,LWP鳄橘。是程序執(zhí)行流行的最小單元。一個(gè)標(biāo)準(zhǔn)的線程是由線程ID芒炼,當(dāng)前指令指針(PC)瘫怜,寄存器集合和堆棧構(gòu)成孟害。線程是依附于進(jìn)程的岛蚤,進(jìn)程是分配資源的最小單位橙凳,一個(gè)進(jìn)程可以生成多個(gè)線程耍缴,這些線程擁有共享的進(jìn)程資源。就每個(gè)線程而言劲厌,只有很少的獨(dú)有資源困乒,如控制線程運(yùn)行的線程控制塊踏兜,保留局部變量和少數(shù)參數(shù)的椥庇眩空間等炸裆。線程是可以訪問所屬進(jìn)程內(nèi)存中的所有數(shù)據(jù),在數(shù)據(jù)共享方面是有很高效率的鲜屏,如果有需要烹看,有些時(shí)候線程也會(huì)去訪問其它線程的數(shù)據(jù)。
線程棧保存了線程運(yùn)行時(shí)候變量值信息洛史。當(dāng)線程訪問某一個(gè)對(duì)象時(shí)候值的時(shí)候惯殊,首先通過對(duì)象的引用找到對(duì)應(yīng)在堆內(nèi)存的變量的值,然后把堆內(nèi)存變量的具體值load到線程本地內(nèi)存中也殖,建立一個(gè)變量副本土思,之后線程就不再和對(duì)象在堆內(nèi)存變量值有任何關(guān)系,而是直接修改副本變量的值毕源,在修改完之后的某一個(gè)時(shí)刻(線程退出之前)浪漠,自動(dòng)把線程變量副本的值回寫到對(duì)象在堆中變量。這樣在堆中的對(duì)象的值就產(chǎn)生變化了霎褐。在這里順便說下volatile這個(gè)關(guān)鍵字,volatile修飾的變量该镣,線程每次使用變量時(shí)冻璃,都會(huì)讀取變量修改后的最新值,但volatile并不表示原子性操作损合,它只能保證該變量被修改后馬上更新到主存(即保證下一個(gè)要讀取的線程可以讀取到最新值)省艳,若是之前已經(jīng)被其他線程讀取到線程的工作內(nèi)存,那么該變量是不會(huì)更新過去的嫁审,不過只要能保證線程執(zhí)行的時(shí)序問題跋炕,就可以認(rèn)為是原子性操作。