Java是最早開始有并發(fā)的語言之一,再過去傳統(tǒng)多任務(wù)的模式下,人們發(fā)現(xiàn)很難解決一些更為復(fù)雜的問題,這個(gè)時(shí)候我們就有了并發(fā).
引用
多線程比多任務(wù)更加有挑戰(zhàn)。多線程是在同一個(gè)程序內(nèi)部并行執(zhí)行,因此會(huì)對(duì)相同的內(nèi)存空間進(jìn)行并發(fā)讀寫操作。這可能是在單線程程序中從來不會(huì)遇到的問題。其中的一些錯(cuò)誤也未必會(huì)在單CPU機(jī)器上出現(xiàn),因?yàn)閮蓚€(gè)線程從來不會(huì)得到真正的并行執(zhí)行。然而,更現(xiàn)代的計(jì)算機(jī)伴隨著多核CPU的出現(xiàn),也就意味著不同的線程能被不同的CPU核得到真正意義的并行執(zhí)行。
那么,要開始Java并發(fā)之路,就要開始從java線程開始說起.
本篇幅將是本系列博客的開山篇,也就是基礎(chǔ)線程的復(fù)習(xí).
線程簡(jiǎn)介
線程百科
線程,有時(shí)被稱為輕量級(jí)進(jìn)程(Lightweight Process,LWP),是程序執(zhí)行流的最小單元。一個(gè)標(biāo)準(zhǔn)的線程由線程ID,當(dāng)前指令指針(PC),寄存器集合和堆棧組成。另外,線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,線程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)兒在運(yùn)行中必不可少的資源,但它可與同屬一個(gè)進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。